Lewati file lokal ke URL di Jawa


175

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

Jawaban:


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

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


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


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

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


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


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)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.