まず、私は多くのS.O.このトピックに関する質問と私はそれらで提案されたことを試してみました。コンパイル済みのjarのリソースへのアクセス方法は?
ここは私の状況です。私はProcessingフレームワークを使用してJavaアプリケーションを作成しています。アプリケーションのパッケージ化について考え始める必要がある最後の段階です。コマンドラインから実行可能なjarファイルは、Eclipseのエクスポート機能を使用してビルドしようとしているものです。
私のプロジェクトの構造は次のようになります。
src/
multiple packages/
libs/
jar files and natives
data/
fonts and images
config/
json files
私はjarファイルをエクスポートし、それが内容だ検査するjarファイルをuzipとき、私はこれらのdirsの内容はトップレベルに投棄されていることがわかります.jarのこのようになります
:
.jar
packages
jar files
fonts
json files
だから、私のようなもので、設定ファイルをロードしようとすると:私は、Eclipseでアプリを実行すると
BufferedReader reader = new BufferedReader(new FileReader(path));
すべてが単にファイルで動作します。しかし、jarファイルはFileNotFoundException
をスローします。
私がS.O.で見た多くの質問。これらの問題については、class.getClass().getResource()
またはclass.getResourceAsStream()
を使用してお勧めします。私は
java -jar myjarfile.jar
を:使用してEclipseやjarファイルのいずれかから実行した場合、nullを返し
class.getResource('config.json');
class.getResources('cfg/config.json');
class.getResourceAsStream('../../config.json');
これらのメソッドのすべてを:私はのようにこれらの使用の相対パスとファイル名だけの両方を試してみましたAntファイルを使用することもできます。実際には、エクスポート機能で生成されたAntファイルを使用してjarを構築しています。何かがある場合は、それに追加することができます瓶には、ディレクトリも素晴らしいでしょう。
ご回答ありがとうございます。 getResource()に追加してスラッシュを使用することをお勧めしますか? – JeremyFromEarth
これははるかに近づくようです。これは、これが返すパスです: jar:file:/ C:/path_to_project/myjarfile.jar!/config.jsonただし、jarファイルを実行すると、パスは正しくてもファイルは例外ではありません。また、Eclipse内で動作することについても言及する必要があります。 – JeremyFromEarth
jars内のリソースでFileReaderを使用することはできません。 getResourceAsSTreamから返されたInputStreamを使用する必要があります。 –