1. ホーム
  2. java

[解決済み] Java JARファイル内のリソースへのパスを取得する方法

2022-04-21 12:02:09

質問

リソースへのパスを取得しようとしているのですが、うまくいきません。

これは(IDEとJARの両方で)動作しますが、この方法ではファイルへのパスは取得できず、ファイルの内容のみが取得されます。

ClassLoader classLoader = getClass().getClassLoader();
PrintInputStream(classLoader.getResourceAsStream("config/netclient.p"));

こうすれば

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("config/netclient.p").getFile());

その結果、次のようになります。 java.io.FileNotFoundException: file:/path/to/jarfile/bot.jar!/config/netclient.p (No such file or directory)

リソースファイルへのパスを取得する方法はありますか?

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

これは意図的なものです。 "file"の中身は、ファイルとして利用できない可能性があります。 JARファイルや他の種類のリソースの一部である可能性があるクラスやリソースを扱っていることを忘れないでください。クラスローダーは、リソースへのファイルハンドルを提供する必要はありません。例えば、jar ファイルは、ファイルシステム内で個々のファイルに展開されていないかもしれません。

java.io.Fileを取得してできることは、java.io.Fileがどうしても必要な場合は、ストリームを一時ファイルにコピーして同じことをすればよいのではと思います。