[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
라이브러리를 사용하여 이러한 작업을 쉽게 수행할 수 있습니다.