Passer un fichier local à l'URL en Java

175

Comment créer un nouvel URLobjet à l'aide d'un fichier local, à des fins de tests unitaires?

Pendant ce temps-là
la source

Réponses:

283
new File(path).toURI().toURL();
Jarnbjo
la source
22
Pour java 7+: Paths.get ("path", "to", "stuff"). ToUri (). ToURL ()
Ajax
46

Utilisation de Java 7:

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

Cependant, vous souhaitez probablement obtenir un fichier URI. Par exemple, a URIcommence par file:///mais une URL avec file:/(du moins, c'est ce qui toStringproduit).

Aleksandr Dubinsky
la source
"... un URI commence par file: /// mais une URL avec file: / ..." Est-ce le cas pour Windows et Linux?
ptntialunrlsd
@ptntialunrlsd C'est une bonne question. Je n'ai pas vérifié, mais je suppose que oui.
Aleksandr Dubinsky
7
Non. Une URL n'est qu'un cas particulier d'URI. Un URI de fichier commence par "file: //" puis répertorie l'hôte (généralement omis), suivi de "/" et du chemin "foo / bar" (généralement destiné à être lu comme un chemin absolu). Ainsi "file: /// foo / var". Un URI qui ressemble à "file: / foo / bar" est incorrect. Voir aussi: schéma d'URI de fichier
David Tonhofer
@DavidTonhofer Merci pour l'explication des URI, mais cela ne répond pas à la question de ptntialunrlsd . Que produit '... toURL (). ToString ()' sous Linux? De plus, j'ai annulé vos modifications car elles ont rendu ma réponse plus verbeuse sans en changer le sens.
Aleksandr Dubinsky
3
@AleksandrDubinsky Il est préférable de laisser les pointeurs vers le javadoc Oracle, cependant ... plus facile à cliquer java.nio.file.Paths. Assurez-vous également de bien préciser que vous faites référence aux implémentations dans "URI vs URL". Anway java.net.URL.toString()produit la même chose sous Unix, comme il se doit. Il n'affiche qu'un seul "/", ce qui est très faux (voir le schéma URI du fichier ). Je suppose que c'est en Java pour des raisons, une meilleure utilisation java.net.URI. Il génère correctement "file: // [hôte] /" lors d'un appel à .toString().
David Tonhofer
40
new File("path_to_file").toURI().toURL();
Ted Hopp
la source
21
new URL("file:///your/file/here")
Alex
la source
1
/your/file/hereest un chemin absolu vers un fichier sous Unix / Linux. Sur Windows, ce serait différent je pense.
Robin Green
5
Ce n'est pas très intelligent, car vous devez gérer vous-même l'échappement des caractères qui ne sont pas autorisés dans les URL. Sous Windows (et potentiellement d'autres systèmes d'exploitation), vous devez également modifier le séparateur de chemin du chemin natif vers le fichier.
jarnbjo
new URL("file:my.properties");
weberjn
Bien que cela soit correct, il n'est pas portable car il dépend de chemins absolus.
mazunki
10
File myFile=new File("/tmp/myfile");
URL myUrl = myFile.toURI().toURL();
Sean Patrick Floyd
la source
5

regardez ici la syntaxe complète: http://en.wikipedia.org/wiki/File_URI_scheme pour les systèmes de type Unix, ce sera comme @Alex l'a dit file:///your/file/herealors que pour les systèmes Windowsfile:///c|/path/to/file

Liv
la source
7
Ne faites pas cela manuellement. File.toURI().toURL()c'est la voie à suivre
Sean Patrick Floyd
3
@SeanPatrickFloyd parfois vous n'avez pas le choix, comme quand c'est dans un .propertiesfichier.
Traîneau
@ArtB Je ne vois pas en quoi cela fait une différence
Sean Patrick Floyd
2
@SeanPatrickFloyd, cette question / réponse apparaît lorsque vous recherchez java file url, ce qui signifie dans mon cas que je recherchais le format d'une file://URL, en Java, à utiliser dans un .propertiesfichier, ou à taper manuellement, etc.
daveloyall
1
@SeanPatrickFloyd parfois vous n'avez pas accès au code source, juste à la propriété, et file://c'est malheureusement nécessaire. Être dépendant du système n'est pas un si gros problème car c'est une propriété mutable.
vikingsteve
4

Vous pouvez aussi utiliser

[AnyClass].class.getResource(filePath)
xMichal
la source
2
mais seulement si ce fichier existe dans le classpath
aepurniet
1
Si le "filePath" peut être trouvé dans un fichier jar, l'URL résultante est comme jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer le