프로그램/JAVA

[Spring] JAVA 파일 압축하기 (ZIP, ARCHIVE)

프뚜 2022. 9. 2. 08:00
728x90
반응형
SMALL

안녕하세요!

프뚜(프로그래머 뚜)입니다!

 

[개발 환경]

 - OS: windows 10 64bit

 - JAVA: v1.8

 - SpringBoot: v2.7.3

 

Java에서 파일 압축 소스에 대해 공유하려고 합니다. java에서 제공하는 기본 압축은 속도가 느린 반면에 org.apache.commons.compress.archivers.zip.*에서 제공하는 zip은 좀 더 빠르고 압축률이 좋아서 포스팅합니다.

 

 

- 프로젝트 구조

프로젝트명: petoo
 - src/main/java/tistory/TestController
 - URI: / (GET)

 

 

- 프로젝트 > build.gradle

// 2022.09.02[프뚜]: zip 관련된 라이브러리
implementation("org.apache.commons:commons-compress:1.21")

apache에서 제공하는 라이브러리를 연동 합니다.

 

 

- 프로젝트 > TestController 소스

// 2022.09.02[프뚜]: 경로
String path = "D:\\";

// 2022.09.02[프뚜]: 파일명
List<String> fileList = new ArrayList();
fileList.add("1.mp4");
fileList.add("2.png");
fileList.add("3.jpg");

// 2022.09.02[프뚜]: 저장할 때 사용하는 사이즈
int size = 1024;

// 2022.09.02[프뚜]: zip 파일 생성 및 encoding
ZipArchiveOutputStream zos = new ZipArchiveOutputStream(new BufferedOutputStream(Files.newOutputStream(Paths.get(path + "petoo.zip"))));
zos.setEncoding("UTF-8");

for (String file : fileList) {
    // 2022.09.02[프뚜]: zip파일에 압축될 파일경로와 파일명
    FileInputStream fis = new FileInputStream(path + file);
    BufferedInputStream bis = new BufferedInputStream(fis, size);

    // 2022.09.02[프뚜]: zip파일에 넣음
    zos.putArchiveEntry(new ZipArchiveEntry(file));

    byte[] buf = new byte[size];
    int len;
    while ((len = bis.read(buf, 0, size)) != -1) {
        zos.write(buf, 0, len);
    }

    bis.close();
    fis.close();
    zos.closeArchiveEntry();
}

zos.close();

 

파일을 압축할 때 사용하는 코드입니다.

 

 

해당 프로젝트는 gitlab에 제공되고 있습니다. (포스팅 제목과 Git History는 1:1 매칭입니다.)
https://github.com/JeongSeongSoo/spring-tistory.git

 

GitHub - JeongSeongSoo/spring-tistory

Contribute to JeongSeongSoo/spring-tistory development by creating an account on GitHub.

github.com


궁금하신 부분 또는 문제가 생긴 부분에 대해서 댓글 남겨주시면 빠르고 정확한 답변드리겠습니다.

728x90
반응형
LIST