Java Unzipファイルの例

Java Unzipファイルの例へようこそ。前の投稿では、Javaでファイルとディレクトリを圧縮する方法について学びましたが、ここでは同じzipファイルを別の出力ディレクトリに展開します。

Java Unzipファイル

zipファイルを展開するには、ZipInputStreamでzipファイルを読み込み、すべてのZipEntryを1つずつ読み込む必要があります。そして、FileOutputStreamを使用してファイルシステムに書き込みます。また、出力ディレクトリが存在しない場合や、zipファイル内にネストされたディレクトリがある場合は、それらのディレクトリを作成する必要もあります。以下は、先に作成したtmp.zipを出力ディレクトリに展開するJavaのunzipファイルプログラムです。

package com.journaldev.files;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipFiles {

    public static void main(String[] args) {
        String zipFilePath = "/Users/pankaj/tmp.zip";
        
        String destDir = "/Users/pankaj/output";
        
        unzip(zipFilePath, destDir);
    }

    private static void unzip(String zipFilePath, String destDir) {
        File dir = new File(destDir);
        // 出力ディレクトリが存在しない場合は作成する
        if(!dir.exists()) dir.mkdirs();
        FileInputStream fis;
        // ファイルの読み書きのためのバッファ
        byte[] buffer = new byte[1024];
        try {
            fis = new FileInputStream(zipFilePath);
            ZipInputStream zis = new ZipInputStream(fis);
            ZipEntry ze = zis.getNextEntry();
            while(ze != null){
                String fileName = ze.getName();
                File newFile = new File(destDir + File.separator + fileName);
                System.out.println("Unzipping to "+newFile.getAbsolutePath());
                // zip内のサブディレクトリのためのディレクトリを作成する
                new File(newFile.getParent()).mkdirs();
                FileOutputStream fos = new FileOutputStream(newFile);
                int len;
                while ((len = zis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
                }
                fos.close();
                // このZipEntryを閉じる
                zis.closeEntry();
                ze = zis.getNextEntry();
            }
            // 最後のZipEntryを閉じる
            zis.closeEntry();
            zis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

プログラムが終了すると、すべてのzipファイルの内容が出力フォルダに同じディレクトリ階層で展開されます。上記プログラムの出力は次のとおりです:

Unzipping to /Users/pankaj/output/.DS_Store
Unzipping to /Users/pankaj/output/data/data.dat
Unzipping to /Users/pankaj/output/data/data.xml
Unzipping to /Users/pankaj/output/data/xmls/project.xml
Unzipping to /Users/pankaj/output/data/xmls/web.xml
Unzipping to /Users/pankaj/output/data.Xml
Unzipping to /Users/pankaj/output/DB.xml
Unzipping to /Users/pankaj/output/item.XML
Unzipping to /Users/pankaj/output/item.xsd
Unzipping to /Users/pankaj/output/ms/data.txt
Unzipping to /Users/pankaj/output/ms/project.doc

これで、Java Unzipファイルの例については以上です。

Source:
https://www.digitalocean.com/community/tutorials/java-unzip-file-example