Passa un file locale all'URL in Java


175

Come posso creare un nuovo URLoggetto usando un file locale, ai fini di unit test?

Risposte:


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

22
Per java 7+: Paths.get ("path", "to", "stuff"). ToUri (). ToURL ()
Ajax

46

Utilizzando Java 7:

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

Tuttavia, probabilmente vorrai ottenere un URI. Ad esempio, un URIinizia con file:///ma un URL con file:/(almeno, questo è ciò che toStringproduce).


"... un URI inizia con il file: /// ma un URL con il file: / ..." È il caso sia di Windows che di Linux?
ptntialunrlsd,

@ptntialunrlsd Questa è una buona domanda. Non ho controllato, ma credo di si.
Aleksandr Dubinsky,

7
No. Un URL è solo un caso speciale di un URI. Un URI di file inizia con "file: //" e quindi elenca l'host (generalmente omesso), seguito da "/" e dal percorso "pippo / barra" (generalmente inteso come un percorso assoluto). Quindi "file: /// foo / var". Un URI che assomiglia a "file: / foo / bar" non è corretto. Vedi anche: file URI schema
David Tonhofer

@DavidTonhofer Grazie per la spiegazione degli URI, ma ciò non risponde alla domanda di ptntialunrlsd . Cosa produce "... toURL (). ToString ()" su Linux? Inoltre, ho ripristinato le tue modifiche perché hanno reso la mia risposta più prolissa senza cambiare il significato.
Aleksandr Dubinsky,

3
@AleksandrDubinsky È meglio lasciare comunque i puntatori al javadoc di Oracle .. più facile da cliccare java.nio.file.Paths. Inoltre, assicurati di chiarire che intendi le implementazioni in "URI vs URL". Anway java.net.URL.toString()produce la stessa cosa su Unix, come deve. Mostra solo un "/" che è molto sbagliato (vedi schema URI file ). Immagino che questo sia in Java per motivi, un uso migliore java.net.URI. Genera correttamente "file: // [host] /" su una chiamata a .toString().
David Tonhofer,


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

1
dove /your/file/hereè un percorso assoluto per un file su Unix / Linux. Su Windows sarebbe diverso penso.
Robin Green,

5
Non è molto intelligente, dal momento che devi gestire la fuga di caratteri che non sono ammessi negli URL da soli. Su Windows (e potenzialmente su altri sistemi operativi), devi anche modificare il separatore di percorso dal percorso nativo al file.
jarnbjo,

new URL("file:my.properties");
weberjn,

Sebbene sia corretto, non è portatile in quanto dipende da percorsi assoluti.
mazunki


5

dai un'occhiata qui per la sintassi completa: http://en.wikipedia.org/wiki/File_URI_scheme per sistemi unix-like sarà come ha detto @Alex file:///your/file/herementre per sistemi Windows sarebbefile:///c|/path/to/file


7
Non farlo manualmente. File.toURI().toURL()è la strada da percorrere
Sean Patrick Floyd,

3
@SeanPatrickFloyd a volte non hai scelta, come quando si trova in un .propertiesfile.
Slitta

@ArtB Non vedo come questo faccia la differenza
Sean Patrick Floyd,

2
@SeanPatrickFloyd, questa domanda / risposta arriva quando cerchi java file url, il che nel mio caso significa che stavo cercando il formato di un file://URL, in Java, da utilizzare in un .propertiesfile o da digitare manualmente, ecc.
daveloyall

1
@SeanPatrickFloyd a volte non hai accesso al codice sorgente, solo alla proprietà, ed file://è purtroppo necessario. Essere dipendenti dal sistema non è un problema così grande poiché è una proprietà mutabile.
vikingsteve,

4

Puoi anche usare

[AnyClass].class.getResource(filePath)

2
ma solo se quel file esiste all'interno del classpath
aepurniet,

1
Se il "filePath" si trova in un barattolo, l'URL risultante è simile jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.