여러개의 파일들을 하나의 Zip 파일로 압축하는 자바 코드입니다.
String zipFileName = "c:/file.zip"; String[] files = new String[3]; files[0] = "c:/a.so"; files[1] = "c:/b.dat"; files[2] = "c:/c.cfg"; byte[] buf = new byte[4096]; try { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); for (int i=0; i<files.length; i++) { FileInputStream in = new FileInputStream(files[i]); Path p = Paths.get(files[i]); String fileName = p.getFileName().toString(); ZipEntry ze = new ZipEntry(fileName); out.putNextEntry(ze); int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } out.closeEntry(); in.close(); } out.close(); } catch (IOException e) { e.printStackTrace(); }
a.so, a.dat, c.cfg 파일 세개를 file.zip으로 압축합니다. 특히, 19번 코드의 ZipEntry의 생성자의 인자에 경로가 들어갈 경우 압축 파일 내부에도 동일한 경로가 형성됩니다. 코드 최저화는 각자의 몫으로 남겨 둡니다.
참고로 위의 클래스들을 위해 필요한 import 문의 삽입을 위해 이클립스에서는 ^~O (Ctrl+Shift+O)를 입력하시면 됩니다.