[java] 자바에서 압축 파일을 분할 압축하기

파일이나 폴더를 압축하고 분할하여 더 작은 용량으로 저장할 수 있는 기능은 매우 유용합니다. 자바에서는 ZipOutputStream을 사용하여 이 작업을 수행할 수 있습니다.

1. 의존성 추가

먼저, Maven이나 Gradle과 같은 빌드 도구를 사용하여 commons-compress 의존성을 프로젝트에 추가해야 합니다.

Maven의 경우:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

Gradle의 경우:

implementation 'org.apache.commons:commons-compress:1.21'

2. 자바 코드

다음은 파일을 분할하여 압축하는 간단한 예제 코드입니다.

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileSplitter {
    public static void splitAndCompress(File inputFile, int segmentSizeMB) throws IOException {
        try (FileInputStream fis = new FileInputStream(inputFile)) {
            byte[] buffer = new byte[1024 * 1024 * segmentSizeMB];
            int partNumber = 1;

            int bytesRead;
            while ((bytesRead = fis.read(buffer)) > 0) {
                File outputFile = new File(inputFile.getParent(), inputFile.getName() + "_part" + partNumber + ".zip");
                try (FileOutputStream fos = new FileOutputStream(outputFile);
                     ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(fos)) {
                    ZipArchiveEntry zipEntry = new ZipArchiveEntry(inputFile.getName());
                    zipEntry.setSize(bytesRead);
                    zipOut.putArchiveEntry(zipEntry);
                    zipOut.write(buffer, 0, bytesRead);
                    zipOut.closeArchiveEntry();
                }
                partNumber++;
            }
        }
    }
}

위의 코드는 splitAndCompress 메서드를 사용하여 파일을 분할하고 압축하는 방법을 보여줍니다. segmentSizeMB 매개변수는 각 분할된 파일의 크기를 메가바이트 단위로 정의합니다.

3. 사용 예

다음은 FileSplitter 클래스를 사용하는 간단한 예제입니다.

import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        File inputFile = new File("path/to/input/file");
        int segmentSizeMB = 10;

        try {
            FileSplitter.splitAndCompress(inputFile, segmentSizeMB);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

요약

이렇게 하면 자바에서 압축 파일을 분할하여 저장할 수 있습니다. commons-compress 라이브러리를 사용하여 이러한 작업을 쉽게 수행할 수 있습니다.