# 부록 : 자바 zip 만들기 https://minaminaworld.tistory.com/131

 

[Java] 자바 zip 파일 만들기( 파일 , 폴더 압축하기)

부록 : zip 압축 풀기. [Java] 자바 zip 압축 풀기 ( 파일 , 폴더 압축 풀기) # 자바로 zip 파일 압축 풀기. - 폴더 안에 파일과, 하위 폴더 압축해버리기. - 아래의 ZIP 파일 압축 풀기. # UnZip.java - ZIP 파일..

minaminaworld.tistory.com


# 자바로 zip 파일 압축 풀기.

 

    - 폴더 안에 파일과, 하위 폴더 압축해버리기. 

 

    - 아래의 ZIP 파일 압축 풀기.

 

 


# UnZip.java - ZIP 파일 압축 풀기

package zipUtil;

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

public class UnZip {
	/**
	 * 압축풀기 메소드
	 * 
	 * @param zipFileName 압축파일
	 * @param directory   압축 풀 폴더
	 */
	public boolean unZip(String zipPath, String zipFileName, String zipUnzipPath) {

		// 파일 정상적으로 압축이 해제가 되어는가.
		boolean isChk = false;

		// 해제할 홀더 위치를 재조정
		zipUnzipPath = zipUnzipPath + zipFileName.replace(".zip", "");

		// zip 파일
		File zipFile = new File(zipPath + zipFileName);

		FileInputStream fis = null;
		ZipInputStream zis = null;
		ZipEntry zipentry = null;

		try {
			// zipFileName을 통해서 폴더 만들기
			if (makeFolder(zipUnzipPath)) {
				System.out.println("폴더를 생성했습니다");
			}

			// 파일 스트림
			fis = new FileInputStream(zipFile);

			// Zip 파일 스트림
			zis = new ZipInputStream(fis, Charset.forName("EUC-KR"));

			// 압축되어 있는 ZIP 파일의 목록 조회
			while ((zipentry = zis.getNextEntry()) != null) {
				String filename = zipentry.getName();
				System.out.println("filename(zipentry.getName()) => " + filename);
				File file = new File(zipUnzipPath, filename);

				// entiry가 폴더면 폴더 생성
				if (zipentry.isDirectory()) {
					System.out.println("zipentry가 디렉토리입니다.");
					file.mkdirs();
				} else {
					// 파일이면 파일 만들기
					System.out.println("zipentry가 파일입니다.");
					try {
						createFile(file, zis);
					} catch (Throwable e) {
						e.printStackTrace();
					}
				}
			}
			isChk = true;
		} catch (Exception e) {
			isChk = false;
		} finally {
			if (zis != null) {
				try {
					zis.close();
				} catch (IOException e) {
				}
			}
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
				}
			}
		}
		return isChk;
	}

	/**
	 * @param folder - 생성할 폴더 경로와 이름
	 */
	private boolean makeFolder(String folder) {
		if (folder.length() < 0) {
			return false;
		}

		String path = folder; // 폴더 경로
		File Folder = new File(path);

		// 해당 디렉토리가 없을경우 디렉토리를 생성합니다.
		if (!Folder.exists()) {
			try {
				Folder.mkdir(); // 폴더 생성합니다.
				System.out.println("폴더가 생성되었습니다.");
			} catch (Exception e) {
				e.getStackTrace();
			}
		} else {
			System.out.println("이미 폴더가 생성되어 있습니다.");
		}
		return true;
	}

	/**
	 * 파일 만들기 메소드
	 * 
	 * @param file 파일
	 * @param zis  Zip스트림
	 */
	private void createFile(File file, ZipInputStream zis) throws Throwable {

		// 디렉토리 확인
		File parentDir = new File(file.getParent());
		// 디렉토리가 없으면 생성하자
		if (!parentDir.exists()) {
			parentDir.mkdirs();
		}
		FileOutputStream fos = null;
		// 파일 스트림 선언
		try {

			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;
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
				}

			}

		}

	}
}

 

 

# Main.java - ZIP 파일 압축 풀기

package Main;

//import zipUtil.CompressZip;
import zipUtil.UnZip;

/**
 * Main
 */
public class Main {
	public static void main(String[] args) {

		// 압축 파일 위치와 압축된 파일
		 String zipPath = "G:/ZIP_TEST/";
		 String zipFile = "jsmpeg-player-master.zip";

		// 압축을 해제할 위치, 압축할 파일이름
		String unZipPath = "G:/ZIP_TEST/TEST/";
		String unZipFile = "jsmpeg-player";

		System.out.println("--------- 압축 해제 ---------");
		UnZip unZip = new UnZip();
		
		// 압축 해제 
		if (!unZip.unZip(zipPath, zipFile, unZipPath)) {
			System.out.println("압축 해제 실패");
		}

//		System.out.println("--------- 압축 하기 ---------");
//		CompressZip compressZip = new CompressZip();
//
//		// 압축 하기
//		try {
//			if (!compressZip.compress("G:/ZIP_TEST/TEST/jsmpeg-player-master", unZipPath, unZipFile)) {
//				System.out.println("압축 실패");
//			}
//		} catch (Throwable e) {
//			e.printStackTrace();
//		}
	}
}

# 결과화면

블로그 이미지

미나미나미

댓글을 달아 주세요

  • 편지배달 2020.03.03 16:29 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 질문이 있습니다.
    zip 압축 파일이 한개가 아니고 여러개 일때는 어떻게하면 한꺼번에 압축해제를 할 수 있을까요?
    zip 파일명에 상관없이 해당 경로에 있는 zip파일은 다 압축해제하려고 하는데요..