Javaアプリケーションを格納するJarファイルには、任意のバイナリファイルをリソースとして入れる事が出来ます。これにより、たくさんのファイルを一つにまとめられるので開発したアプリケーションを配布したり、Javaアプレットを公開する時にはJarファイルにまとめればすっきりするでしょう。Jarファイルに格納するファイルはまとめてZIP圧縮をかけることができるので、容量面でも有利です。 JarファイルJarファイルを作るには、 jar cvf jarファイル名 アーカイブするファイル名 とします。これで、指定したファイルがデフォルト状態ではZIPで圧縮されjarファイルにまとめられます。なお、引数を変えることで圧縮しないアーカイブや署名を施したアーカイブも作成可能です。 jar cvf jarres.jar jarres.class test.bmp としてjarres.jarというjarファイルにまとめ、jarres.classからtest.bmpを読み込むストリームを開くには、jarres.classのソースファイルで InputStream fs=jarres.class.getResourceAsStream("test.bmp"); としてtest.bmpを読み込むストリームを作ってストリームからデータを読み込みます。 このように複数のファイルを一つのアーカイブにまとめる機能は、特に多くのグラフィックやサウンドを利用するアプリケーション開発で有効でしょう。 リソースからのBMP読み込みでは、実際にjarファイルからファイルを読み込んでみましょう。今回は、クラスファイルとbmpファイルをjarファイルにアーカイブして、Javaのプログラムからbmpファイルをバイナリリソースとして読み込んでみます。 まず、読み込む処理ですが、これはBMPファイルの読み込みで作成したreadBMP()をそのまま使います。ただし、今回はファイルではなくリソースのストリームから読み込むので、その部分だけを変えれば良いでしょう。リソースを読み込むストリームは、classオブジェクトのgetResourceAsStream()で開いて、リソースの大きさはavailable()で取得してみました。 InputStream fs=jarres.class.getResourceAsStream(fn); size=fs.available(); dat=new byte[size]; fs.read(dat); fs.close(); これで、BYTE型配列datにfnで指定されたリソースの全内容が格納されたので、後はBMPファイルの読み込みの時と同様の処理でその内容からBufferedImageを作るだけです。 プログラム今回もJava2です。まず、コンパイルしてクラスファイルjarres.classが出来たら、適当な24ビットBMPを用意してください。そして、 jar cvf jarres.jar jarres.class bmpファイル名 としてjarファイルを作成します。プログラムでは、読み込むファイルをテキストフィールドで指定できるようにしておきましたので、早速jarファイルを実行(java jarres)して、bmpファイルを読み込んでみてください。実行する時には、ちゃんとjarファイルから読み込まれているかを確かめるためにjarファイルだけを他のディレクトリに移しておくと良いでしょう。 |