Yerel bir dosyayı Java'daki URL'ye aktarma


175

URLBirim testleri amacıyla yerel bir dosya kullanarak nasıl yeni bir nesne oluşturabilirim ?

Yanıtlar:


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

22
Java 7+ için: Paths.get ("path", "to", "stuff"). ToUri (). ToURL ()
Ajax

46

Java 7'yi kullanma:

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

Ancak, muhtemelen bir URI. Örneğin, a ile URIbaşlar file:///ancak ile bir URL file:/(en azından, bu toStringüretir).


"... bir URI dosya: /// ile başlıyor ama şu dosyaya sahip bir URL: / ..." Bu durum hem Windows hem de Linux için geçerli mi?
ptntialunrlsd

@ptntialunrlsd Bu iyi bir soru. Kontrol etmedim, ama sanırım evet.
Aleksandr Dubinsky

7
Hayır. URL, URI için yalnızca özel bir durumdur. Bir dosya URI'si "file: //" ile başlar ve ardından ana bilgisayarı (genellikle atlanır), ardından "/" ve "foo / bar" yolunu (genellikle mutlak yol olarak okunması amaçlanır) listeler. Böylece "file: /// foo / var". "File: / foo / bar" gibi görünen bir URI yanlış. Ayrıca bakınız: dosya URI şeması
David Tonhofer

@DavidTonhofer URI'lerin açıklaması için teşekkür ederiz, ancak bu ptntialunrlsd'in sorusuna cevap vermez . Linux'ta '... toURL (). ToString ()' ne üretir? Ayrıca, düzenlemelerinizi geri aldım çünkü anlamımı değiştirmeden cevabımı daha garip hale getirdiler.
Aleksandr Dubinsky

3
@AleksandrDubinsky İşaretçileri Oracle Javadoc'a bırakmak en iyisidir. Tıklamak daha kolay java.nio.file.Paths. Ayrıca, lütfen "URI ve URL" deki uygulamaları kasteddiğinizden emin olun . Anway java.net.URL.toString(), Unix'te olması gerektiği gibi aynı şeyi üretiyor. Çok yanlış olan yalnızca bir "/" görüntüler ( dosya URI şemasına bakın ). Sanırım bu Java nedeniyle nedenlerle, daha iyi kullanın java.net.URI. Çağrıldığında doğru şekilde "file: // [host] /" oluşturur .toString().
David Tonhofer


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

1
burada /your/file/hereUnix / Linux'taki bir dosyaya giden mutlak bir yoldur. Windows'da farklı olacağını düşünüyorum.
Robin Green

5
Bu çok zekice değil, çünkü URL'lerde izin verilmeyen karakterlerden kaçınmanız gerekiyor. Windows'ta (ve muhtemelen diğer işletim sistemlerinde), yol ayırıcıyı yerel yoldan dosyaya değiştirmeniz gerekir.
jarnbjo

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

Bu doğru olmakla birlikte, mutlak yollara bağlı olduğu için taşınabilir değildir.
mazunki


5

tam sözdizimi için bir göz atın: http://en.wikipedia.org/wiki/File_URI_scheme unix benzeri sistemler için @Alex'in söylediği gibi file:///your/file/here, Windows sistemleri için isefile:///c|/path/to/file


7
Bunu manuel olarak yapma. File.toURI().toURL()gitmek için yoldur
Sean Patrick Floyd

3
@SeanPatrickFloyd bazen bir .propertiesdosyada olduğu gibi bir seçeneğiniz yoktur .
Kızak

@ArtB Bunun nasıl bir fark yarattığını göremiyorum
Sean Patrick Floyd

2
@SeanPatrickFloyd, bu soru / cevap aradığınızda ortaya çıkıyor java file url, bu durumda benim durumumda bir file://URL'nin biçimini, Java'da, bir .propertiesdosyada kullanmak veya manuel olarak yazmak vb. İçin arama yaptığım anlamına gelir .
daveloyall

1
@SeanPatrickFloyd bazen kaynak koduna erişemezsiniz, sadece mülke ve file://maalesef gereklidir. Sisteme bağımlı olmak, değişebilir bir özellik olduğu için büyük bir mesele değildir.
2017'de

4

Ayrıca kullanabilirsiniz

[AnyClass].class.getResource(filePath)

2
ancak bu dosya sınıf yolu içinde mevcutsa
aepurniet

1
"FilePath" bir kavanozda bulunursa, ortaya çıkan URL benzerdir jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt.
David Tonhofer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.