複数のファイルとフォルダをZIPに圧縮する方法

Javaには標準でzipに圧縮・展開するためのAPIがあります。

確かにzipに圧縮できる機能は備わっているのですが、扱い方が複雑で少しとっつきにくいです。

そこでzip専用のライブラリである Zip4j を使います。

これを使えば複雑な処理もほんの数行のコードで書けてしまいます。

ライブラリの導入

まず、Zip4Jのダウンロードページからzip4j_x.x.x.jar(xはバージョン名)をダウンロードしてきます。

それを自分のアプリのプロジェクトのlibsフォルダにコピーします。

これでZip4jの機能が使えるようになります。

ファイルとフォルダの圧縮

では、簡単に使い方を説明します。

Zip4jではZipFileというクラスを使ってzipファイルを操作(ファイルやフォルダの追加)をします。

以下がそのコード例です。

/** 
 * ファイルとフォルダを圧縮する
 * @param 圧縮するFile
 * @param zipName 生成されるzipファイルのパス
 * */
public void compressFiles(
        List<File> files, String zipFilePath)
{
    try{
        ZipFile zipFile = new ZipFile(zipFilePath);
        
        /** パラメータ */
        ZipParameters params = new ZipParameters();         
        params.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
        params.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
        
        /** ファイルの圧縮 */
        for(File file : files){
            if(file.isFile())
                zipFile.addFile(file, params);
            else
                zipFile.addFolder(file, params);
        }
    }catch(ZipException e) {
        e.printStackTrace();
    }
}

これだけでファイルもフォルダも1つのzipファイルに圧縮できます、

zipファイルはZipFileインスタンスが作られた時点で自動的に作成されます。

また、addFolderを使えば階層構造を保ったままファイルやフォルダをそのまま圧縮してくれます。

例えば次のような構造のファイルとフォルダを圧縮するとします。

- Download 
    - PDF
        - sample1.pdf
        - sample2.pdf
- Ringtones
    - call.ogg

上の例でDownloadとRingtonesの内容を圧縮したいしたい場合は次のようなコードでOKです。

final File downloadDir = new File("Downloadへのパス");
final File ringtonesDir = new File("Ringtonesへのパス");

ArrayList<File> files 
= new ArrayList<File>()
{
    {
        add(downloadDir); 
        add(ringtonesDir);
    }
};

compressFiles(files, "zipファイルのパス");

このように簡単にファイルとフォルダを圧縮でき、コードも数行なのでとてもスマートです。

もし、ファイルを圧縮するような場面があればZip4jはおすすめです。

以上、Zip4jによるファイルの圧縮方法でした。では、また!


関連項目
プライバシーポリシー