java.util.zip.ZipEntry 이용하여 압축 파일 생성하기
java에서 압축파일을 생성하기 위한 편리한 유틸들도 있지만 기본적인 java 기반으로 압축파일을 생성하는 예제를 작성해 보았습니다.
일단 임의의 폴더에 압축 테스트를 진행할 몇개의 파일들을 준비해 줍니다.
zip 파일도 일반 파일과 동일하게 입출력을 통하여 생성을 하기 때문에 입출력에 사용되는 IOStream들을 선언 합니다.
FileInputStream fis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
파일을 읽어오기 위한 스트림과 파일에 쓰기위한 스트림, 나머지 하나는 압축파일에 쓰기위한 스트림 이렇게 3개의 stream을 선언합니다.
3개의 stream을 보면 감이 잡히겠지만 FileInputStream으로 압축하려는 파일을 읽어오고 FileOutputStream으로 읽어온 데이터를 기록하는데 이것을 ZipOutputStream의 입력으로 보내서 쓰게되면 압축파일이 생성되는 프로세스 입니다.
간단한 내용이니 소스를 바로 보도록 합니다.
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 ZipTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileInputStream fis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
String fileFolder = "C:/del/ziptest";
File file = new File(fileFolder);
File[] fileList = file.listFiles();
try {
fos = new FileOutputStream("C:/del/ziptest/test.zip");
zos = new ZipOutputStream(fos);
for(File f : fileList) {
fis = new FileInputStream(f);
ZipEntry zipEntry = new ZipEntry(f.getName());
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
fis.close();
zos.closeEntry();
}
zos.close();
fos.close();
} catch(IOException ie) {
ie.getMessage();
}
}
}
폴더에 있는 압축하려는 파일 목록을 가져오는 부분의 소스는
String fileFolder = "C:/del/ziptest";
File file = new File(fileFolder);
File[] fileList = file.listFiles();
이렇게 File[] 배열로 받아옵니다.
읽어온 파일을 기록하는 output 스트림의 방향을 zip으로 보내는 부분은
fos = new FileOutputStream("C:/del/ziptest/test.zip");
zos = new ZipOutputStream(fos);
여기입니다.
저장하려는 파일 위치와 파일명(C:/del/ziptest/test.zip)을 설정합니다.
폴더에 파일이 여러 개 이므로 for 문을 이용하여 파일을 하나씩 불러와 zos에 기록하면 작업이 완료 됩니다.
for(File f : fileList) {
fis = new FileInputStream(f);
ZipEntry zipEntry = new ZipEntry(f.getName());
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
fis.close();
zos.closeEntry();
}
프로그램을 실행합니다. 압축파일이 생성되겠죠.
생성된 압축파일 test.zip을 열어보면 처음에 준비한 파일 3개파일이 압축되어 들어있는 것을 볼 수 있습니다.
- copy coding -