zipその1

java.util.zipパッケージはZIPやGZIPのファイル圧縮、伸長やCRC等のチェックサムを扱う機能があります。ZIPはWindowsではWinZipに代表されるようにファイル群の圧縮とアーカイブを行うことができるファイル形式です。GZIPはGNUプロジェクトで開発された単一ファイルの圧縮形式です(名前が似ていますがZIPとGZIPは別の形式です)。Javaのプログラムからファイルの圧縮、伸長が行えてなかなか便利です。残念ながら日本国内でよく用いられているLZH形式には対応していません。

単にzip形式のファイルの伸長、展開を行うにはjava.util.zip.ZipFileクラスとjava.util.zip.ZipEntryクラスだけで事足ります。例えば、/tmp/sample.zipというファイルがあったとして、これをカレントディレクトリ以下に伸長、展開するには、

	// まずZipFileオブジェクトを作成します
	File dir = new File(".");
	File file = new File("/tmp/sample.zip");
	ZipFile zipfile = new ZipFile(file);

	// zipファイル内の各エントリを見ます
	Enumeration enum = zipfile.entries();
	while (enum.hasMoreElements()) {
		ZipEntry entry = (ZipEntry) enum.nextElement();

		// 伸長するファイルの名前と取り出します。
		String name = entry.getName();

		// 出力先のファイルを用意します。
		File outputfile = new File(dir, name);
		FileOutputStream out = new FileOutputStream(outputfile);

		// エントリのストリームを取り出します。
		InputStream in = zipfile.getInputStream(entry);

		// エントリから出力先にバイト列をコピーします。
		byte[] buffer = new byte[512];
		int size = 0;
		while ((size = in.read(buffer)) > 0) {
			out.write(buffer, 0, size);
		}

		// ストリームを閉じます
		out.close();
		in.close();
	}
で完了です。

ZipEntryからはファイルの名前の他に、圧縮前のサイズ、圧縮された状態のサイズ、コメント、最終更新時刻、CRC-32のチェックサム値を採ることができます。

ZipFileは読み出し専用のオブジェクトですので、zipファイルを作成するにはZipOutputStreamクラスを使う必要があります。


人材開発室 PoisonSoft