ImageIO がいくつかの .png から BufferedImage を読み取るためのリソースへのパスを取得したいと考えています。プロジェクトの開発中、「/bin/stuff/icons/image.png」への相対パスを使用しますが、すべてを .jar ファイルにまとめると、これは明らかに機能しません。そのため、へのパスを取得する方法が必要です。これらのリソースは、Eclipse でのテスト中と、後で .jar 内で実行するときの両方で使用できます。
2 に答える
ファイルの検索とファイルへの入力ストリームの取得の両方を何度も試した後、このアプローチは毎回機能するという結論に達しました。
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(path)
BufferedImage image = ImageIO.read(in)
パスはどこにありますか
"projectName/resourceFolder/" + nameOfResource.stuff
eclipseプロジェクトのsrcディレクトリにあります。
例えば
"myProject/images/icon.png"
リソースのみを取得してからファイルにリンクするリソースのパスを取得する場合、.jarを使用するとFileNotFoundExceptionsが発生します(ただし、Eclipseでのテスト中は発生しないため、彼のコードが機能すると考えるように警告する必要があります)。
そして-いいえ-私はbinに画像を保存しません/-しかし、それらはこのディレクトリにコピーされているので、テスト中にそこで見つけます。今、すべてが機能しているようです。
Eclipseのディレクトリの下には何も置かないでくださいbin
。プロジェクトでクリーンを実行すると、プロジェクトは消去されます。
できることは、のような新しいソースフォルダを定義し、resources
そこに画像を配置することです。このようにして、フォルダに自動的にコピーされbin
ます。
resources
フォルダをJarに含めると、次のようなものを使用して両方の環境で使用できるようになります。
ImageIO.read( getClass().getResource("/image.png") )
PS:別のリソースフォルダを使用して回避することはできますが、ソースと画像を混在させると、ソースフォルダがすぐに汚染されます。