1. ホーム

[解決済み】jarの中からリソースファイルを読み込む

2022-03-28 14:44:50

質問

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を使用しており、私のファイルがあるフォルダはclassフォルダにあります。

どのように解決するのですか?

としてリソースをアドレス指定しようとするのではなく ファイル と聞けばいいだけです。 クラスローダー を返すように 入力ストリーム の代わりに、リソースに対して getResourceAsStream :

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 (a zip ファイル) のような、古い ファイル .

の回答でよく説明されています。