[Java] Zip 압축 해제하기


Development note/Java  2015. 6. 8. 23:07

안녕하세요 명월입니다.


이번 포스트는 저번 포스트의 압축된 Zip파일을 해제하는 모듈을 만들어 보겠습니다.


Zip 압축 하기 포스트 - [Java] Zip 압축하기

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

public class Zip {
  /**
   * 압축풀기 메소드
   * @param zipFileName 압축파일
   * @param directory 압축 풀 폴더
   */
  public static void decompress(String zipFileName, String directory) throws Throwable {
    File zipFile = new File(zipFileName);
    FileInputStream fis = null;
    ZipInputStream zis = null;
    ZipEntry zipentry = null;
    try {
      //파일 스트림
      fis = new FileInputStream(zipFile);
      //Zip 파일 스트림
      zis = new ZipInputStream(fis);
      //entry가 없을때까지 뽑기
      while ((zipentry = zis.getNextEntry()) != null) {
        String filename = zipentry.getName();
        File file = new File(directory, filename);
        //entiry가 폴더면 폴더 생성
        if (zipentry.isDirectory()) {
          file.mkdirs();
        } else {
          //파일이면 파일 만들기
          createFile(file, zis);
        }
      }
    } catch (Throwable e) {
      throw e;
    } finally {
      if (zis != null)
        zis.close();
      if (fis != null)
        fis.close();
    }
  }
  /**
   * 파일 만들기 메소드
   * @param file 파일
   * @param zis Zip스트림
   */
  private static void createFile(File file, ZipInputStream zis) throws Throwable {
    //디렉토리 확인
    File parentDir = new File(file.getParent());
    //디렉토리가 없으면 생성하자
    if (!parentDir.exists()) {
      parentDir.mkdirs();
    }
    //파일 스트림 선언
    try (FileOutputStream fos = new FileOutputStream(file)) {
      byte[] buffer = new byte[256];
      int size = 0;
      //Zip스트림으로부터 byte뽑아내기
      while ((size = zis.read(buffer)) > 0) {
        //byte로 파일 만들기
        fos.write(buffer, 0, size);
      }
    } catch (Throwable e) {
      throw e;
    }
  }
  public static void main(String[] args){
    try{
      Zip.decompress("D:\\test.zip", "D:\\test1");
    }catch(Throwable e){
      e.printStackTrace();
    }
  }
}

압축 해제 모듈은 압축의 반대 모션으로 작성이 되었네요. entry를 Zip스트림으로 부터 받아서 디렉토리면 티렉토리 생성을 파일이면 파일생성을 하는 것입니다.

소스 해석은 주석을 달아 놓았으니 참고해 주세요.


실행한 결과화면입니다.

압축 해제 실행결과