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 활용법을 알아 보겠습니다. 감사합니다.
일상에서 벗어나 진정한 휴식을 꿈꾼다면, 일본 하코네 온천 료칸만큼 매력적인 여행지도 드물 것입니다. 하지만 검색만…
디즈니랜드 여행을 앞두고 가장 중요한 고민 중 하나는 바로 “숙소 선택”입니다. 꿈같은 하루를 선물하고 싶은…
스이카 카드 발급 해야하는 이유 "도쿄 지하철 정복은 스이카 카드 없으면 절대 불가능합니다!" "이 카드…
리버 크루즈를 타야만 하는 이유 "오사카 여행에서 낮에는 활기찬 거리, 밤에는 화려한 네온사인으로 물든 도시를…
오사카 여행에 필수적인 교통패스인 오사카 교통패스에 대해 소개 하겠습니다. 일본 오사카 여행을 준비 중이시라면, 효율적인…
후쿠오카는 일본 여행지 중에서도 근교 여행지와 맛집, 쇼핑, 자연 풍경, 도시를 한 번에 즐길 수…