Lewati file lokal ke URL di Jawa

175

Bagaimana cara membuat URLobjek baru menggunakan file lokal, untuk keperluan tes unit?

Sementara itu
sumber

Jawaban:

283
new File(path).toURI().toURL();
jarnbjo
sumber
22
Untuk java 7+: Paths.get ("path", "to", "stuff"). ToUri (). ToURL ()
Ajax
46

Menggunakan Java 7:

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

Namun, Anda mungkin ingin mendapatkan URI. Misalnya, URIdiawali dengan file:///tetapi dengan URL file:/(setidaknya, itulah yang toStringmenghasilkan).

Aleksandr Dubinsky
sumber
"... URI dimulai dengan file: /// tetapi URL dengan file: / ..." Apakah itu kasus untuk Windows dan Linux?
ptntialunrlsd
@ptntialunrlsd Itu pertanyaan yang bagus. Saya belum memeriksa, tapi saya kira ya.
Aleksandr Dubinsky
7
Tidak. URL hanyalah kasus khusus dari URI. Sebuah file URI dimulai dengan "file: //" dan kemudian daftar host (umumnya dihilangkan), diikuti oleh "/" dan path "foo / bar" (umumnya dimaksudkan untuk dibaca sebagai path absolut). Jadi "file: /// foo / var". URI yang terlihat seperti "file: / foo / bar" tidak benar. Lihat juga: ajukan skema URI
David Tonhofer
@DavidTonhofer Terima kasih atas penjelasan URI, tetapi itu tidak menjawab pertanyaan ptntialunrlsd . Apa yang dihasilkan oleh '... toURL (). ToString ()' di Linux? Juga, saya telah mengembalikan suntingan Anda karena mereka membuat jawaban saya lebih bertele-tele tanpa mengubah artinya.
Aleksandr Dubinsky
3
@AleksandrDubinsky Lebih baik meninggalkan pointer ke Oracle javadoc di .. lebih mudah untuk mengklik java.nio.file.Paths. Juga, pastikan untuk menjelaskan bahwa yang Anda maksud adalah implementasi di "URI vs URL". Anway java.net.URL.toString()menghasilkan hal yang sama pada Unix, sebagaimana mestinya. Ini hanya menampilkan satu "/" yang sangat salah (lihat skema file URI ). Saya kira ini di Jawa karena alasan, lebih baik digunakan java.net.URI. Itu benar menghasilkan "file: // [host] /" pada panggilan ke .toString().
David Tonhofer
40
new File("path_to_file").toURI().toURL();
Ted Hopp
sumber
21
new URL("file:///your/file/here")
Alex
sumber
1
di mana /your/file/herepath absolut ke file di Unix / Linux. Pada Windows akan berbeda saya pikir.
Robin Green
5
Itu tidak terlalu pintar, karena Anda harus menangani sendiri pelarian karakter yang tidak diizinkan dalam URL. Pada Windows (dan kemungkinan sistem operasi lainnya), Anda juga harus memodifikasi pemisah jalur dari jalur asli ke file.
jarnbjo
new URL("file:my.properties");
weberjn
Meskipun ini benar, ini tidak portabel karena tergantung pada jalur absolut.
mazunki
10
File myFile=new File("/tmp/myfile");
URL myUrl = myFile.toURI().toURL();
Sean Patrick Floyd
sumber
5

lihat di sini untuk sintaks lengkapnya: http://en.wikipedia.org/wiki/File_URI_scheme untuk sistem seperti unix akan seperti yang dikatakan @Alex file:///your/file/heresedangkan untuk sistem Windows adalahfile:///c|/path/to/file

Liv
sumber
7
Jangan lakukan itu secara manual. File.toURI().toURL()adalah cara untuk pergi
Sean Patrick Floyd
3
@SeanPatrickFloyd terkadang Anda tidak punya pilihan, seperti ketika ada dalam .propertiesfile.
Kereta luncur
@ArtB Saya tidak melihat bagaimana itu membuat perbedaan
Sean Patrick Floyd
2
@SeanPatrickFloyd, pertanyaan / jawaban ini muncul ketika Anda mencari java file url, yang dalam kasus saya berarti saya sedang mencari format file://URL, di Jawa, untuk digunakan dalam .propertiesfile, atau untuk mengetik secara manual, dll.
daveloyall
1
@SeanPatrickFloyd terkadang Anda tidak memiliki akses ke kode sumber, hanya ke properti, dan file://sayangnya diperlukan. Menjadi ketergantungan sistem bukanlah masalah besar karena ini adalah properti yang bisa berubah.
vikingsteve
4

Anda juga bisa menggunakan

[AnyClass].class.getResource(filePath)
xMichal
sumber
2
tetapi hanya jika file itu ada dalam classpath
aepurniet
1
Jika "filePath" dapat ditemukan dalam toples, URL yang dihasilkan seperti jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer