Pase un archivo local a la URL en Java

175

¿Cómo creo un nuevo URLobjeto usando un archivo local, con el propósito de pruebas unitarias?

Mientras tanto
fuente

Respuestas:

283
new File(path).toURI().toURL();
jarnbjo
fuente
21
Para java 7+: Paths.get ("ruta", "a", "cosas"). ToUri (). ToURL ()
Ajax
46

Usando Java 7:

Paths.get(string).toUri().toURL();

Sin embargo, probablemente quieras obtener un URI. Por ejemplo, a URIcomienza con file:///pero una URL con file:/(al menos, eso es lo que toStringproduce).

Aleksandr Dubinsky
fuente
"... un URI comienza con el archivo: /// pero una URL con el archivo: / ..." ¿Es ese el caso tanto para Windows como para Linux?
ptntialunrlsd
@ptntialunrlsd Esa es una buena pregunta. No lo he comprobado, pero supongo que sí.
Aleksandr Dubinsky
77
No. Una URL es solo un caso especial de un URI. Un URI de archivo comienza con "file: //" y luego enumera el host (generalmente omitido), seguido de "/" y la ruta "foo / bar" (generalmente destinada a leerse como una ruta absoluta). Así "file: /// foo / var". Un URI que se parece a "file: / foo / bar" es incorrecto. Ver también: esquema de URI de archivo
David Tonhofer
@DavidTonhofer Gracias por la explicación de los URI, pero eso no responde a la pregunta de ptntialunrlsd . ¿Qué produce '... toURL (). ToString ()' en Linux? Además, he revertido sus ediciones porque hicieron que mi respuesta fuera más prolija sin cambiar el significado.
Aleksandr Dubinsky
3
@AleksandrDubinsky Sin embargo, es mejor dejar punteros al javadoc de Oracle ... más fácil de hacer clic java.nio.file.Paths. Además, asegúrese de dejar en claro que se refiere a las implementaciones en "URI vs URL". Anway java.net.URL.toString()produce lo mismo en Unix, como debe ser. Solo muestra un "/" que está muy mal (ver esquema de URI de archivo ). Supongo que esto está en Java por razones, mejor uso java.net.URI. Genera correctamente "file: // [host] /" en una llamada a .toString().
David Tonhofer
40
new File("path_to_file").toURI().toURL();
Ted Hopp
fuente
21
new URL("file:///your/file/here")
Alex
fuente
1
donde /your/file/herees una ruta absoluta a un archivo en Unix / Linux. En Windows sería diferente, creo.
Robin Green
55
Eso no es muy inteligente, ya que debe manejar el escape de caracteres que no están permitidos en las URL usted mismo. En Windows (y potencialmente en otros sistemas operativos), también debe modificar el separador de ruta de la ruta nativa al archivo.
jarnbjo
new URL("file:my.properties");
weberjn
Si bien esto es correcto, no es portátil, ya que depende de rutas absolutas.
mazunki
10
File myFile=new File("/tmp/myfile");
URL myUrl = myFile.toURI().toURL();
Sean Patrick Floyd
fuente
5

eche un vistazo aquí para ver la sintaxis completa: http://en.wikipedia.org/wiki/File_URI_scheme para sistemas tipo UNIX, será como dijo @Alex, file:///your/file/heremientras que para sistemas Windows seríafile:///c|/path/to/file

Liv
fuente
77
No hagas eso manualmente. File.toURI().toURL()es el camino a seguir
Sean Patrick Floyd
3
@SeanPatrickFloyd a veces no tienes otra opción, como cuando está en un .propertiesarchivo.
Trineo
@ArtB No veo cómo eso marca la diferencia
Sean Patrick Floyd
2
@SeanPatrickFloyd, esta pregunta / respuesta aparece cuando busca java file url, lo que en mi caso significa que estaba buscando el formato de una file://URL, en Java, para usar en un .propertiesarchivo, o para escribir manualmente, etc.
daveloyall
1
@SeanPatrickFloyd a veces no tiene acceso al código fuente, solo a la propiedad, y file://desafortunadamente es necesario. Ser dependiente del sistema no es un problema tan grande ya que es una propiedad mutable.
vikingsteve
4

También puedes usar

[AnyClass].class.getResource(filePath)
xMichal
fuente
2
pero solo si ese archivo existe dentro del classpath
aepurniet
1
Si el "filePath" se puede encontrar en un jar, la URL resultante es como jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer