[java] 자바에서 ZIP 파일 생성하기

ZIP 파일은 여러 파일이나 폴더를 하나의 압축된 파일로 만드는데 유용합니다. 자바에서는 java.util.zip 패키지를 사용하여 ZIP 파일을 생성할 수 있습니다.

1. ZipOutputStream 사용하기

java.util.zip.ZipOutputStream 클래스를 사용하여 ZIP 파일을 생성할 수 있습니다. 아래 예제는 ZipOutputStream을 사용하여 파일을 ZIP으로 압축하는 방법을 보여줍니다.

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

public class ZipFileExample {
    public static void main(String[] args) {
        byte[] buffer = new byte[1024];

        try {
            FileOutputStream fos = new FileOutputStream("example.zip");
            ZipOutputStream zos = new ZipOutputStream(fos);
            ZipEntry ze = new ZipEntry("example.txt");
            zos.putNextEntry(ze);
            FileInputStream in = new FileInputStream("example.txt");

            int len;
            while ((len = in.read(buffer)) > 0) {
                zos.write(buffer, 0, len);
            }

            in.close();
            zos.closeEntry();

            zos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드는 example.txt 파일을 example.zip으로 압축합니다. ZipEntry 클래스를 사용하여 각 파일을 ZIP 파일에 추가합니다.

2. 라이브러리 사용하기

자바에서는 Apache Commons Compress와 같은 라이브러리를 사용하여 ZIP 파일을 더 쉽게 처리할 수도 있습니다. 아래는 Apache Commons Compress를 사용한 예제입니다.

import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;

import java.io.*;


public class ZipFileExample {
    public static void main(String[] args) {
        try {
            FileOutputStream fos = new FileOutputStream("example.zip");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ZipArchiveOutputStream zos = new ZipArchiveOutputStream(bos);

            File file = new File("example.txt");
            ArchiveEntry entry = new ZipArchiveEntry(file, "example.txt");
            zos.putArchiveEntry(entry);
            InputStream is = new FileInputStream(file);
            IOUtils.copy(is, zos);
            is.close();
            zos.closeArchiveEntry();

            zos.finish();
            zos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Apache Commons Compress를 사용하면 더 간결하고 효율적인 방법으로 ZIP 파일을 생성할 수 있습니다.

결론

이 글에서는 자바에서 ZIP 파일을 생성하는 두 가지 방법을 살펴보았습니다. ZipOutputStream 클래스를 사용하는 방법과 Apache Commons Compress를 사용하는 방법입니다. 필요에 따라 적절한 방법을 선택하여 ZIP 파일을 생성할 수 있습니다.