Java는 파일 압축과 해제를 간단하게 처리할 수 있는 강력한 도구를 제공합니다. 특히, java.util.zip
패키지는 Zip 형식의 파일을 생성하고 읽는 데 필요한 다양한 클래스와 메서드를 포함하고 있습니다. 이 블로그에서는 Java에서의 파일 압축과 해제에서 Zip 파일 다루는 방법 알아보겠습니다.
1. Zip 파일의 기본 이해
Zip 파일이란?
Java의 java.util.zip
패키지는 다음과 같은 주요 클래스를 제공합니다:
2. Java로 Zip 파일 생성하기
Zip 파일을 생성하려면 ZipOutputStream
과 FileOutputStream
을 결합하여 사용합니다.
Zip 파일 생성 예제
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFileCreation {
public static void main(String[] args) {
String[] files = {"file1.txt", "file2.txt"};
String zipFileName = "output.zip";
try (FileOutputStream fos = new FileOutputStream(zipFileName);
ZipOutputStream zos = new ZipOutputStream(fos)) {
for (String file : files) {
FileInputStream fis = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(file);
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) >= 0) {
zos.write(buffer, 0, length);
}
fis.close();
}
System.out.println("Zip 파일 생성 완료: " + zipFileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
설명:
ZipOutputStream
을 사용하여 압축 데이터를 작성합니다.ZipEntry
객체로 추가합니다.ZipOutputStream
에 작성합니다.3. Java로 Zip 파일 해제하기
Zip 파일의 압축을 해제하려면 ZipInputStream
과 FileOutputStream
을 사용합니다.
Zip 파일 해제 예제
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZipFileExtraction {
public static void main(String[] args) {
String zipFileName = "output.zip";
String outputDir = "unzipped/";
try (FileInputStream fis = new FileInputStream(zipFileName);
ZipInputStream zis = new ZipInputStream(fis)) {
ZipEntry zipEntry;
while ((zipEntry = zis.getNextEntry()) != null) {
File newFile = new File(outputDir + zipEntry.getName());
System.out.println("추출 중: " + newFile.getAbsolutePath());
// 디렉토리 생성
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fos = new FileOutputStream(newFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
}
}
System.out.println("Zip 파일 해제 완료.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
설명:
ZipInputStream
을 사용하여 압축 파일을 읽습니다.ZipEntry
객체를 순회하며 파일을 추출합니다.4. 추가 기능: 비밀번호 보호 및 압축 레벨 설정
Java 기본 java.util.zip
패키지는 비밀번호 보호를 지원하지 않지만, Apache Commons Compress와 같은 외부 라이브러리를 사용하여 이를 구현할 수 있습니다.
압축 레벨 설정:
ZipOutputStream
에서 압축 레벨을 설정하려면 setLevel()
메서드를 사용합니다.예:
zos.setLevel(Deflater.BEST_COMPRESSION);
5. 파일 압축과 해제의 실용적 활용 사례
결론
Java에서의 파일 압축과 해제에서 Zip 파일 다루는 방법 알아보았습니다. Java의 java.util.zip
패키지는 간단한 API로 강력한 파일 압축과 해제 기능을 제공합니다.
ZipOutputStream
과 ZipInputStream
을 적절히 활용하면 대규모 데이터 처리와 파일 관리 작업을 효율적으로 수행할 수 있습니다.
더 나아가 Apache Commons Compress와 같은 외부 라이브러리를 사용하면 추가적인 보안과 기능을 구현할 수 있습니다. 다음 블로그에서는 Java에서의 비동기 처리:리에서 CompletableFuture 활용법을 알아 보겠습니다. 감사합니다.
오키나와 나하공항에 도착하거나 돌아가는 길, 바쁜 비행 일정에 쫓겨 허겁지겁 평범한 음식으로 끼니를 대충 때우신…
간사이 여행을 계획 중이신가요? 오사카, 교토, 고베를 아우르는 간사이 지역 여행에서 가장 중요한 필수품이 바로…
일본으로의 여행을 꿈꾸며 설레는 마음으로 출발을 준비할 때, 반드시 잊지 말아야 할 부분이 있습니다. 그것은…
일본여행의 준비 청소년 시기, 가장 많이 꿈꾸는 ‘해외여행’. 그 중에서도 한국에서 가깝고 볼거리·즐길거리도 다양해 많은…