ローカルファイルをJavaのURLに渡す


175

URL単体テストの目的で、ローカルファイルを使用して新しいオブジェクトを作成するにはどうすればよいですか?

回答:



46

Java 7の使用:

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

ただし、おそらくを取得する必要がありURIます。たとえば、aでURI始まるfile:///がURLで始まるfile:/(少なくとも、それがtoString生成するものです)。


「... URIはfile:///で始まりますが、URLはfile:/ ...です」WindowsとLinuxの両方に当てはまりますか?
ptntialunrlsd 2015

@ptntialunrlsdそれは良い質問です。私はチェックしていませんが、そうだと思います。
Aleksandr Dubinsky 2015

7
いいえ。URLは、URIの特殊なケースにすぎません。ファイルURIは「file://」で始まり、次にホスト(通常は省略)、「/」およびパス「foo / bar」(通常は絶対パスとして読み取られることを意味します)がリストされます。したがって、「file:/// foo / var」となります。「file:/ foo / bar」のようなURIは正しくありません。参照:ファイルURIスキーム
David Tonhofer

@DavidTonhofer URIの説明をありがとうございますが、それはptntialunrlsdの質問には答えません。Linuxでは '... toURL()。toString()'は何を生成しますか?また、意味を変えずに私の回答をより詳細にしたため、編集を元に戻しました。
Aleksandr Dubinsky

3
@AleksandrDubinskyただし、Oracle javadocへのポインタを残すのが最善です。クリックしてに移動するのが簡単ですjava.nio.file.Paths。また、「URIとURL」の実装であることを明確にしてください。Anway java.net.URL.toString()は、必要に応じて、Unixでも同じものを生成します。非常に間違っている「/」が1つだけ表示されます(ファイルURIスキームを参照)。これはJavaでの理由であると思いますjava.net.URI。の呼び出し時に「file:// [host] /」を正しく生成します.toString()
David Tonhofer


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

1
どこ/your/file/hereのUnix / Linux上のファイルへの絶対パスです。Windowsでは違うと思います。
Robin Green、

5
URLで許可されていない文字のエスケープを自分で処理する必要があるため、これはあまり賢明ではありません。Windows(および場合によっては他のオペレーティングシステム)では、パス区切り文字をネイティブパスからファイルに変更する必要もあります。
jarnbjo 2011年

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

これは正しいですが、絶対パスに依存するため、移植性はありません。
mazunki


5

完全な構文については、こちらをご覧くださいhttp : //en.wikipedia.org/wiki/File_URI_scheme UNIXライクなシステムの場合は@Alexと同じようになりfile:///your/file/here、Windowsシステムの場合はfile:///c|/path/to/file


7
手動で行わないでください。File.toURI().toURL()行く方法です
ショーンパトリックフロイド

3
@SeanPatrickFloydは、.propertiesファイルにある場合など、選択できない場合があります。
そり

@ArtBそれがどのように違いを生むかわかりません
ショーンパトリックフロイド

2
@SeanPatrickFloyd、この質問/回答はを検索したときに表示されますjava file url。つまり、私の場合はfile://、Javaで、.propertiesファイルで使用するために、または手動で入力するために、URL の形式を検索していたことになります
daveloyall

1
@SeanPatrickFloydには、ソースコードへのアクセス権がなく、プロパティへのアクセス権がない場合がありますが、file://残念ながら必要です。システムに依存することは、変更可能なプロパティであるため、それほど大きな問題ではありません。
vikingsteve 2017年

4

あなたも使うことができます

[AnyClass].class.getResource(filePath)

2
ただし、そのファイルがクラスパス内に存在する場合のみ
aepurniet

1
"filePath"がjarにある場合、結果のURLはのようになりますjar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt
David Tonhofer、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.