Passer un fichier local à l'URL en Java


Réponses:


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

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


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


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

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


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


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)

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.