意外と知らないファイル圧縮技術の常識:プログラマーの常識をJavaで身につける(8)(4/4 ページ)
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回はアーカイブと圧縮の違いなどの基礎知識とともに、Java APIでJava定番のファイル圧縮形式jarやgzip、zip形式を扱う方法も紹介。
java.util.jarパッケージでjarファイルを操作
jarファイル形式の概要
jarファイルはJava言語でよく利用されるファイル圧縮/アーカイブ形式で、内部的には、zip形式と同じ仕様を採用しています。ただし、単にzip形式を採用しているのではなく、マニフェスト機能などが付与されています。
jarファイルはコンパイル後のclassファイルをまとめる目的でよく利用されます。具体的には、Javaクラスライブラリの配布形式を作成する場合や、Webなどにデプロイするためのファイルを作成する過程などで利用されます。
「Java Archive(JAR)ファイル」に公式ドキュメントがあります。
jarファイル作成手順の自動化
ビルドプロセスの自動化の観点から、jarファイル作成などのモジュール作成手順を自動化しておくことは、現実的なソフトウェア開発において重要なことの1つです。このような自動化のためのスキルは、専門技能として世間で認識されているほどです。
記事執筆時点では、ビルドプロセスなどの自動化にはApache Ant(あるいは、Apache Maven)がよく利用されます。
一方、JDK(Java SE Development Kit)では、jarファイル作成のために、jarコマンドが提供されています。jarコマンドについては、「jar - Java Archive ツール(Windows版)」に公式ドキュメントがあります。単にjarファイルを作成したい場合などには、こちらのコマンドを利用することもあります。
jarファイルを作成するサンプル
通常は、Apache Antやjarコマンドでjarファイルを作成するものなのですが、ここではJava APIを利用してjarファイルを作成するサンプルを見ていきましょう。
jarファイルを作成するには、java.util.jar.JarOutputStreamクラスを利用します。APIはjava.util.zip.ZipOutputStreamの使い方によく似ています。ただしjarファイルの場合は、java.util.jar.Manifestクラスのインスタンスをコンストラクタに与えている点が異なります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行結果(コンソール出力)
jarファイル作成: 開始: C:\Documents and Settings\iga\workspace\aaa\jarsample.jar
jarファイル作成: 終了
jarファイルを読み込むサンプル
作成したjarファイルを展開(解凍)しながら読み込むサンプルプログラムを見ていきましょう。使用するjava.util.jar.JarInputStreamクラスは基本的に、java.util.zip.ZipInputStreamと同じようなAPIになっていますが、java.util.jar.Manifestクラスを取り出すことができるようになっている点が異なります。
また、今回は展開(解凍)したファイル内容を16進文字列表示するように変えています。ここで示すソースコードをコンパイルおよび実行するためには、以前の記事で掲載したHexStringUtilクラスが必要です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行結果(コンソール出力)
jarファイル読込: 開始: C:\Documents and Settings\iga\workspace\aaa\jarsample.jar
マニフェスト
Created-By: [1.5.0_13 (Sun Microsystems Inc.)]
Manifest-Version: [1.0]
ディレクトリ名: [ABC/]
ファイル名: [ABC/ABC.txt]
内容: [82 a0 82 a2 82 a4 82 a6 82 a8]
ファイル名: [ABC/DEF.txt]
内容: [82 a9 82 ab 82 ad 82 af 82 b1]
ファイル名: [GHI.txt]
内容: [82 b3 82 b5 82 b7 82 b9 82 bb]
jarファイル読込: 終了
アーカイブ/圧縮技術を活用しよう!
ファイル圧縮に関する話題や関連するJava APIについて紹介してきましたが、いかがだったでしょうか?
今回の記事で紹介したようなJava APIを活用することによって、比較的簡単に開発しているアプリケーションにアーカイブ機能や圧縮機能を組み入れることができます。これは、とても素晴らしいことだと思います。一方で、いくつかの注意点についても紹介しました。それらの注意点にも気を付けつつ、ファイル圧縮技術をぜひ活用してください。
筆者紹介
blanco Framework(コミッタ)
伊賀 敏樹(いが としき)
ハンドル:いがぴょん
1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。 現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。 趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。
ホームページ
いがぴょんの日記ウェブページv2(1996年から続けているWeb日記)
主な著書
「やさしく学ぶ基礎からのJDBC」
「Javaプログラミング[アプリケーション編]ステップアップラーニング」
Copyright © ITmedia, Inc. All Rights Reserved.