Übergeben Sie eine lokale Datei an die URL in Java


Antworten:


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

21
Für Java 7+: Paths.get ("Pfad", "zu", "Zeug"). ToUri (). ToURL ()
Ajax

45

Verwenden von Java 7:

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

Allerdings möchten Sie wahrscheinlich eine bekommen URI. ZB URIbeginnt ein mit, file:///aber eine URL mit file:/(zumindest ist es das, was toStringproduziert).


"... ein URI beginnt mit file: ///, aber eine URL mit file: / ..." Ist das sowohl für Windows als auch für Linux der Fall?
Ptntialunrlsd

@ptntialunrlsd Das ist eine gute Frage. Ich habe nicht überprüft, aber ich würde ja raten.
Aleksandr Dubinsky

6
Nein. Eine URL ist nur ein Sonderfall einer URI. Ein Datei-URI beginnt mit "file: //" und listet dann den Host (im Allgemeinen weggelassen) auf, gefolgt von "/" und dem Pfad "foo / bar" (im Allgemeinen als absoluter Pfad zu lesen). Also "file: /// foo / var". Ein URI, der wie "file: / foo / bar" aussieht, ist falsch. Siehe auch: Datei-URI-Schema
David Tonhofer

@DavidTonhofer Vielen Dank für die Erklärung der URIs, aber das beantwortet die Frage von ptntialunrlsd nicht . Was produziert '... toURL (). ToString ()' unter Linux? Außerdem habe ich Ihre Änderungen rückgängig gemacht, weil sie meine Antwort wortreicher gemacht haben, ohne die Bedeutung zu ändern.
Aleksandr Dubinsky

3
@AleksandrDubinsky Es ist jedoch am besten, Zeiger auf das Oracle-Javadoc zu belassen java.nio.file.Paths. Stellen Sie außerdem sicher, dass Sie die Implementierungen in "URI vs URL" meinen . Anway java.net.URL.toString()produziert unter Unix dasselbe, wie es sein muss. Es wird nur ein "/" angezeigt, was sehr falsch ist (siehe Datei-URI-Schema ). Ich denke, dies ist in Java aus Gründen, besser zu nutzen java.net.URI. Bei einem Aufruf von wird "file: // [host] /" korrekt generiert .toString().
David Tonhofer


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

1
Wo /your/file/hereist ein absoluter Pfad zu einer Datei unter Unix / Linux. Unter Windows wäre das anders, denke ich.
Robin Green

5
Das ist nicht sehr klug, da Sie das Entkommen von Zeichen, die in URLs nicht erlaubt sind, selbst handhaben müssen. Unter Windows (und möglicherweise anderen Betriebssystemen) müssen Sie auch das Pfadtrennzeichen vom nativen Pfad zur Datei ändern.
Jarnbjo

new URL("file:my.properties");
Weberjn

Dies ist zwar korrekt, aber nicht portierbar, da es von absoluten Pfaden abhängt.
Mazunki


5

Schauen Sie sich hier die vollständige Syntax an: http://en.wikipedia.org/wiki/File_URI_scheme für Unix-ähnliche Systeme wird es so sein, wie @Alex sagte, file:///your/file/herewährend es für Windows-Systeme sein würdefile:///c|/path/to/file


7
Mach das nicht manuell. File.toURI().toURL()ist der richtige Weg
Sean Patrick Floyd

3
@ SeanPatrickFloyd Manchmal haben Sie keine Wahl, wie wenn es in einer .propertiesDatei ist.
Schlitten

@ArtB Ich sehe nicht, wie das einen Unterschied macht
Sean Patrick Floyd

2
@SeanPatrickFloyd, diese Frage / Antwort wird bei der Suche angezeigt. java file urlIn meinem Fall bedeutet dies, dass ich nach dem Format einer file://URL in Java gesucht habe , um sie in einer .propertiesDatei zu verwenden oder manuell
einzugeben

1
@ SeanPatrickFloyd Manchmal hat man keinen Zugriff auf den Quellcode, nur auf die Eigenschaft, und file://ist leider notwendig. Systemabhängigkeit ist kein so großes Problem, da es sich um eine veränderbare Eigenschaft handelt.
Wikingersteve

4

Sie können auch verwenden

[AnyClass].class.getResource(filePath)

2
aber nur, wenn diese Datei im Klassenpfad existiert
aepurniet

1
Wenn der "filePath" in einem JAR gefunden wird, ist die resultierende URL wie folgt jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.