Przekaż plik lokalny do adresu URL w Javie


Odpowiedzi:


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

22
Dla java 7+: Paths.get ("ścieżka", "do", "rzeczy"). ToUri (). ToURL ()
Ajax

46

Korzystanie z języka Java 7:

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

Jednak prawdopodobnie chcesz uzyskać URI. Np. A URIzaczyna się od, file:///ale adres URL od file:/(przynajmniej to toStringtworzy).


„... identyfikator URI zaczyna się od file: ///, ale adres URL zawiera plik: / ...” Czy tak jest w przypadku systemów Windows i Linux?
ptntialunrlsd

@ptntialunrlsd To dobre pytanie. Nie sprawdzałem, ale myślę, że tak.
Aleksandr Dubinsky

7
Nie. Adres URL to tylko specjalny przypadek identyfikatora URI. Identyfikator URI pliku zaczyna się od „file: //”, a następnie zawiera nazwę hosta (zwykle pomijany), po którym następuje „/” i ścieżka „foo / bar” (ogólnie rozumiana jako ścieżka bezwzględna). Stąd „file: /// foo / var”. Identyfikator URI, który wygląda jak „plik: / foo / bar” jest nieprawidłowy. Zobacz także: schemat URI pliku
David Tonhofer

@DavidTonhofer Dziękuję za wyjaśnienie identyfikatorów URI, ale to nie odpowiada na pytanie ptntialunrlsd . Co „... toURL (). ToString ()” produkuje w systemie Linux? Poza tym cofnęłam Twoje zmiany, ponieważ uczyniły moją odpowiedź bardziej rozwlekłą bez zmiany znaczenia.
Aleksandr Dubinsky,

3
@AleksandrDubinsky Najlepiej jednak pozostawić wskaźniki do Oracle javadoc w… łatwiej jest kliknąć java.nio.file.Paths. Upewnij się również, że masz na myśli implementacje w „URI a URL”. Anway java.net.URL.toString()produkuje to samo na Uniksie, jak musi. Wyświetla tylko jeden znak „/”, który jest bardzo zły (patrz schemat URI pliku ). Myślę, że to jest w Javie z powodów, lepszego wykorzystania java.net.URI. Prawidłowo generuje „file: // [host] /” w wywołaniu .toString().
David Tonhofer,


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

1
gdzie /your/file/herejest bezwzględną ścieżką do pliku w systemie Unix / Linux. Myślę, że w systemie Windows byłoby inaczej.
Robin Green

5
Nie jest to zbyt sprytne, ponieważ sam musisz poradzić sobie z ucieczką znaków, które nie są dozwolone w adresach URL. W systemie Windows (i potencjalnie w innych systemach operacyjnych) należy również zmodyfikować separator ścieżki z natywnej ścieżki do pliku.
jarnbjo

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

Chociaż jest to poprawne, nie jest przenośne, ponieważ zależy od ścieżek bezwzględnych.
mazunki


5

spójrz tutaj na pełną składnię: http://en.wikipedia.org/wiki/File_URI_scheme dla systemów typu unix będzie tak, jak powiedział @Alex, file:///your/file/herepodczas gdy dla systemów Windowsfile:///c|/path/to/file


7
Nie rób tego ręcznie. File.toURI().toURL()jest droga
Sean Patrick Floyd

3
@SeanPatrickFloyd czasami nie masz wyboru, na przykład gdy jest w .propertiespliku.
Sanki

@ArtB Nie wiem, jak to robi różnicę
Sean Patrick Floyd

2
@SeanPatrickFloyd, to pytanie / odpowiedź pojawia się podczas wyszukiwania java file url, co w moim przypadku oznacza, że ​​szukałem formatu file://adresu URL, w Javie, do wykorzystania w .propertiespliku lub do
wpisania

1
@SeanPatrickFloyd czasami nie masz dostępu do kodu źródłowego, tylko do właściwości i file://jest to niestety konieczne. Bycie zależnym od systemu nie jest tak dużym problemem, ponieważ jest to zmienna właściwość.
vikingsteve

4

Możesz także użyć

[AnyClass].class.getResource(filePath)

2
ale tylko wtedy, gdy ten plik istnieje w ścieżce klas
aepurniet

1
Jeśli „filePath” można znaleźć w słoiku, wynikowy adres URL będzie wyglądał jak jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.