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?

Respuestas:


283
new File(path).toURI().toURL();

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).


"... 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


21
new URL("file:///your/file/here")

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


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


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)

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.