본문으로 바로가기

파일들 zip으로 압축하기

category Java/Java 낙서장 2021. 12. 19. 22:04

ZipOutputStream, ZipEntry 를 사용해서 파일을 zip으로 압축해보자.

테스트를 위해서 일단 D:\zip_test_folder 폴더에 4개의 파일을 넣었다.

 

테스트할 파일과 경로

D:\zip_test_folder>dir /b
four.png
one.PNG
three.PNG
two.PNG

 

Java 코드

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FileZipModule {

    public void zip() {
        String where = "D:/zip_test_folder";
        File file_ = new File(where);
        File[] listFiles = file_.listFiles();

        System.out.println(Arrays.toString(listFiles));;

        FileOutputStream fos = null;
        ZipOutputStream zipOut = null;
        FileInputStream fis = null;
        try {

            fos = new FileOutputStream("D:/zip_test_folder/wow.zip");
            zipOut = new ZipOutputStream(fos);

            for(File fileToZip :  listFiles) {

                fis = new FileInputStream(fileToZip);
                ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
                zipOut.putNextEntry(zipEntry);

                // StreamUtils.copy(fis, zipOut); 으로 퉁칠수도 있다.
                byte[] bytes = new byte[1024];
                int length;
                while((length = fis.read(bytes)) >= 0) {
                    zipOut.write(bytes, 0, length);
                }
                // 여기까지.

                fis.close();
                zipOut.closeEntry();
            }

            zipOut.close();
            fos.close();

        } catch (IOException e) {
            System.out.println(e.getMessage());
        } finally {
            try { if(fis != null)fis.close(); } catch (IOException e1) {System.out.println(e1.getMessage());/*ignore*/}
            try { if(zipOut != null)zipOut.closeEntry();} catch (IOException e2) {System.out.println(e2.getMessage());/*ignore*/}
            try { if(zipOut != null)zipOut.close();} catch (IOException e3) {System.out.println(e3.getMessage());/*ignore*/}
            try { if(fos != null)fos.close(); } catch (IOException e4) {System.out.println(e4.getMessage());/*ignore*/}
        }
    }

    public static void main(String[] args) {
        new FileZipModule().zip();
    }

}

 

 

결과

이러고 화면에서 보면 압축파일 위치로 가면 압축파일을 발견할 수 있다.

 

그리고 압축 해제 후에도 파일을 뒤져보면 정상적으로 파일이 압축되었다는 것을 알 수 있다.

'Java > Java 낙서장' 카테고리의 다른 글

Java 로그(Log)를 위한 SLF4J & Logback - 기본  (0) 2021.02.09
[apache POI] 간단 사용법  (1) 2021.01.26