jar 内からリソースファイルを読み取る 質問する

jar 内からリソースファイルを読み取る 質問する

次のように、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.txtclasses/jar

これはURI is not hierarchical、jarファイル内のリソースのURIが次のようになるために発生します。(ファイル)file:/example.jar!/file.txt内のエントリを、普通の古いファイルのように読み取ることはできません。jarzipファイル

これは、次の質問に対する回答によってよく説明されます。

おすすめ記事