안녕하세요 명월입니다.
이번 포스트는 저번 포스트의 압축된 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스트림으로 부터 받아서 디렉토리면 티렉토리 생성을 파일이면 파일생성을 하는 것입니다.
소스 해석은 주석을 달아 놓았으니 참고해 주세요.
실행한 결과화면입니다.
'Development note > Java' 카테고리의 다른 글
[Java] Base64 인코딩, 디코딩하는 방법 (0) | 2019.06.17 |
---|---|
[Java] cmd 명령어를 실행하기 위한 방법 (Process 클래스) (0) | 2019.06.05 |
[Java] 콘솔 입력 값을 받는 방법 (System.in) (0) | 2019.06.05 |
[Java] 파일 전송 예제 (1) | 2015.06.11 |
[Java] Zip 압축하기 (3) | 2015.06.08 |
[Java] 계산기 프로그램 (1) | 2015.06.07 |
[Java] BitConverter (0) | 2015.06.05 |
[Java] WebSocket Parameter Encoding (0) | 2015.04.21 |