Java/Java 낙서장
파일들 zip으로 압축하기
일상코딩
2021. 12. 19. 22:04
ZipOutputStream, ZipEntry 를 사용해서 파일을 zip으로 압축해보자.
테스트를 위해서 일단 D:\zip_test_folder
폴더에 4개의 파일을 넣었다.
테스트할 파일과 경로
D:\zip_test_folder>dir /b
four.png
one.PNG
three.PNG
two.PNG
Java 코드
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileZipModule {
public void zip() {
String where = "D:/zip_test_folder";
File file_ = new File(where);
File[] listFiles = file_.listFiles();
System.out.println(Arrays.toString(listFiles));;
FileOutputStream fos = null;
ZipOutputStream zipOut = null;
FileInputStream fis = null;
try {
fos = new FileOutputStream("D:/zip_test_folder/wow.zip");
zipOut = new ZipOutputStream(fos);
for(File fileToZip : listFiles) {
fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
zipOut.putNextEntry(zipEntry);
// StreamUtils.copy(fis, zipOut); 으로 퉁칠수도 있다.
byte[] bytes = new byte[1024];
int length;
while((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
// 여기까지.
fis.close();
zipOut.closeEntry();
}
zipOut.close();
fos.close();
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
try { if(fis != null)fis.close(); } catch (IOException e1) {System.out.println(e1.getMessage());/*ignore*/}
try { if(zipOut != null)zipOut.closeEntry();} catch (IOException e2) {System.out.println(e2.getMessage());/*ignore*/}
try { if(zipOut != null)zipOut.close();} catch (IOException e3) {System.out.println(e3.getMessage());/*ignore*/}
try { if(fos != null)fos.close(); } catch (IOException e4) {System.out.println(e4.getMessage());/*ignore*/}
}
}
public static void main(String[] args) {
new FileZipModule().zip();
}
}
결과
이러고 화면에서 보면 압축파일 위치로 가면 압축파일을 발견할 수 있다.
그리고 압축 해제 후에도 파일을 뒤져보면 정상적으로 파일이 압축되었다는 것을 알 수 있다.