次のように、jar 内からリソースを読み取りたいと思います。
File file;
file = new File(getClass().getResource("/file.txt").toURI());
BufferedReader reader = new BufferedReader(new FileReader(file));
//Read the file
Eclipse で実行すると正常に動作しますが、jar にエクスポートしてから実行すると、IllegalArgumentException が発生します。
Exception in thread "Thread-2"
java.lang.IllegalArgumentException: URI is not hierarchical
理由はよく分かりませんが、テストしてみると、
file = new File(getClass().getResource("/file.txt").toURI());
に
file = new File(getClass().getResource("/folder/file.txt").toURI());
そうすると、逆に動作します (jar では動作しますが、Eclipse では動作しません)。
私は Eclipse を使用しており、ファイルのあるフォルダーはクラス フォルダー内にあります。
ベストアンサー1
リソースをファイルただ聞いてくださいクラスローダー返す入力ストリーム代わりにリソースをリソースをストリームとして取得:
try (InputStream in = getClass().getResourceAsStream("/file.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
// Use resource
}
リソースがクラスパス上で使用可能である限り、リソースがディレクトリ内にあるか 内にあるfile.txt
かに関係なく、このアプローチは同じように機能します。file.txt
classes/
jar
これはURI is not hierarchical
、jarファイル内のリソースのURIが次のようになるために発生します。(ファイル)file:/example.jar!/file.txt
内のエントリを、普通の古いファイルのように読み取ることはできません。jar
zip
ファイル。
これは、次の質問に対する回答によってよく説明されます。