前の記事では、

zipファイル形式にファイルを圧縮する方法

を示します。この記事では、解凍する方法を説明します。



  1. ZipInputStream

    “でZIPファイルを読む



  2. ZipEntry

    “にファイルを取得し、 ”

    FileOutputStream

    “に出力します

1. ZIPファイルの例を解凍する

この例では、 ”

C:\\ MyFile.zip

“からZIPファイルを読み込み、すべての圧縮ファイルを ”

C:\ outputzip

“フォルダに解凍します。

package com.mkyong.zip;

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

public class UnZip
{
    List<String> fileList;
    private static final String INPUT__ZIP__FILE = "C:\\MyFile.zip";
    private static final String OUTPUT__FOLDER = "C:\\outputzip";

    public static void main( String[]args )
    {
        UnZip unZip = new UnZip();
        unZip.unZipIt(INPUT__ZIP__FILE,OUTPUT__FOLDER);
    }

   /** **
     **  Unzip it
     **  @param zipFile input zip file
     **  @param output zip file output folder
     ** /    public void unZipIt(String zipFile, String outputFolder){

     byte[]buffer = new byte[1024];

     try{

       //create output directory is not exists
        File folder = new File(OUTPUT__FOLDER);
        if(!folder.exists()){
            folder.mkdir();
        }

       //get the zip file content
        ZipInputStream zis =
            new ZipInputStream(new FileInputStream(zipFile));
       //get the zipped file list entry
        ZipEntry ze = zis.getNextEntry();

        while(ze!=null){

           String fileName = ze.getName();
           File newFile = new File(outputFolder + File.separator + fileName);

           System.out.println("file unzip : "+ newFile.getAbsoluteFile());

           //create all non exists folders
           //else you will hit FileNotFoundException for compressed folder
            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();
            ze = zis.getNextEntry();
        }

        zis.closeEntry();
        zis.close();

        System.out.println("Done");

    }catch(IOException ex){
       ex.printStackTrace();
    }
   }
}


出力

file unzip : C:\outputzip\pdf\Java-Interview.pdf
file unzip : C:\outputzip\spy\log\spy.log
file unzip : C:\outputzip\utf-encoded.txt
file unzip : C:\outputzip\utf.txt
Done

リファレンス

Java APIを使用したデータの解凍]