【Java】ZipOutputStreamクラスを使ってzipファイルを圧縮する!

Zipファイルを圧縮するにはZipOutputStreamクラスを使用します。

ZipOutputStreamクラスは、Zipファイル形式でファイルを書き込むための出力ストリーム・フィルタを実装するクラスとなります。

そのため、BufferedInputStreamクラスをセットで使用すると、実行速度が早くなるのでZipOutputStreamクラスでZipファイルを圧縮する場合はBufferedInputStreamクラスを組み合わせて使用しましょう。

今回はZipOutputStreamクラスを使って、Zipファイルの圧縮を行います。

ZipOutputStreamクラスとは

ZipOutputStreamクラスとは、Zipファイル形式でファイルを書き込むための出力ストリーム・フィルタを実装するクラスで、圧縮データと圧縮解除データの両方をサポートします。

ZipOutputStreamクラスの書き方

FileReaderクラスの構文は下記となります。

ZipOutputStreamクラスをインポートすることで、ZipOutputStreamクラスで準備されているメソッドが使用できるようになります。

また、BufferedInputStreamクラスを使用すると、実行速度が上がるので、ZipOutputStreamクラスを使用する場合はBufferedReaderクラスもインポートしておきましょう。

Zipファイルを圧縮するサンプルコード

zipファイルを圧縮するサンプルコードを紹介します。

コンソールから実行する場合は、カレントディレクトリに「target」ディレクトリを用意し、「target」ディレクトリ内に任意のファイルとディレクトリを用意します。
Eclipseで実行する場合は、プロジェクト直下に「target」ディレクトリを用意し、「target」ディレクトリ内に任意のファイルとディレクトリを用意します。

その状態でMain.javaを実行します、

Main.java

出力結果

zip圧縮前の存在確認:false
zip圧縮後の存在確認:true

compress.zipというファイルが作され、コンソールには
zip圧縮前の存在確認:false
zip圧縮後の存在確認:true
と表示されます。

また、 圧縮するファイルの入力ストリームにBufferedInputStreamクラスを使用することで実行速度を速くしています。

今回のポイント

ZipOutputStreamでZipファイルを圧縮

ファイルをZip圧縮するにはZipOutputStreamクラスを使用する。

⚫︎ ZipOutputStreamクラスを使用することで、ファイルをZip圧縮することができる

⚫︎ 次の手順を行うことで、ファイルをZip圧縮することができる

1.書き込み先の出力ストリームをラップする形でZIP出力ストリームを作成
2.ZipOutputStreamクラスのputNextEntryメソッドで、Zipファイル内でのエントリ名を設定
3.圧縮対象がディレクトリの場合、ディレクトリ名の最後に「/」を追加した値をエントリ名に設定
4.圧縮するファイルの内容を読み込み、ZipOutputStreamクラスのwriteメソッドで、ZIP出力ストリームに書き込む
5.すべての内容を書き込み終えたら、読み込み元のストリームを閉じ、ZipOutputStreamクラスのcloseEntryメソッドでエントリを閉じる
2〜4の処理を、Zip圧縮するファイルの数だけ繰り返す
6.ZipOutputStreamクラスのcloseメソッドで、ZIP出力ストリームを閉じる

⚫︎ 圧縮するファイルの入力ストリームにBufferedInputStreamクラスを使用することで実行速度を速くすることができる

関連記事

FileOutputStreamクラスを使ってファイルにデータを書き込む方法についてはこちらをご参考ください。

FileInputStreamクラスを使ってファイルにデータを読み込む方法についてはこちらをご参考ください。

ZipInputStreamクラスを使ってzipファイルを解凍する方法についてはこちらをご参考ください。

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し