java.util.zipパッケージの提供する機能

java.util.zipパッケージの提供する圧縮形式と パッケージ内のクラスとの関連を解説します。
java.util.zip パッケージが現在対応している圧縮形式は、 次の2種類です。

java.util.zip パッケージが取り扱う圧縮形式の比較
圧縮の対象 識別子 直接関連するクラス
zip 階層ディレクトリを単独ファイルに .zip ZipInputStream, ZipOutputStream,
ZipFile,ZipEntry
gzip 単独ファイルを単独ファイルに .gz GZipInputStream,GZipOutputStream

zip と gzip は名前が似ているため混同しやすいので注意してください。 javaのアーカイブ形式に関係するのは zip形式の方のみです。 gzipは単に単独のファイルのサイズを圧縮する目的のみに用いられます。 gcc に代表されるように多くの GNUのソフトウェアは、 オリジナルの名前の頭に "g" を付けて提供されています。 しかし、zip と gzip はそうした関係にはありません。 gzip は UNIXの compressコマンドの代用品として設計されたものです。 (もちろんオリジナルの compress より高性能です。)

zip,gzip 形式のファイルへの入出力は、 ZipInputStream,ZipOutputStrea,GZipInputStream,GZipOutputStreamのオブジェクト を通じて行います。 これらはもちろん InputStream,OutputStream のサブクラスです。 それぞれの形式に対応した圧縮(解凍)の機能、チェックサムの確認の機能なども、 これらのクラスに実装されています。 プログラム内の取り扱いは通常のファイルに対するのとほとんど同じです。
ただし zip形式の場合は、 階層ディレクトリに含まれる複数のディレクトリとファイルを1つのファイルに まとめるので、単純な入出力だけでは不十分です。 ZipFileは zip形式のファイルを、 ZipEntry は zip形式のファイル内に格納される(された)1個1個の要素を 表すためのクラスです。 これら計6個のクラスを組み合わせれば、 zip(unzip) や gzip(gunzip)コマンドに相当する機能を持つプログラムを開発する ことが可能です。

ソースファイル