Zipファイルの作成方法
備忘録を兼ねて、JavaでZIPファイルを作成する場合の方法をメモ。ただし、この方法だと圧縮後のサイズが未設定なので、展開出来ないツールがあるので注意が必要。
public class ZipFileUtils { /** * 指定された対象ファイルを基に、Zipファイルを作成する。 * * @param targetPath * Zipファイルを作成するディレクトリのパス * @param zipFileName * Zipファイル名 * @param files * 対象ファイル * @return Zipファイル */ public static File create(final String targetPath, final String zipFileName, final File[] files) throws IOException { ZipOutputStream out = null; File distDir = new File(targetPath); File distFile = new File(distDir, zipFileName); try { out = new ZipOutputStream(new FileOutputStream(distFile)); for (File file : files) { addEntry(out, file); } } finally { IOUtils.closeQuietly(out); } return distFile; } // ------------------------------------------------------ [Private Methods] /** * 指定されたファイルをZipファイルにエントリーする。 * * @param out * Zipファイル用アウトプットストリーム * @param entryFile * Zipファイルに格納するファイル * @throws IOException * ファイルが存在しない場合 */ private static void addEntry(ZipOutputStream out, File entryFile) throws IOException { ZipEntry zipEntry = new ZipEntry(entryFile.getPath()); out.putNextEntry(zipEntry); InputStream in = null; try { in = new BufferedInputStream(new FileInputStream(entryFile)); byte[] buf = new byte[1024]; int count = 0; while ((count = in.read(buf, 0, 1024)) != -1) { out.write(buf, 0, count); } } finally { IOUtils.closeQuietly(in); out.closeEntry(); } } }
微妙にcommons-ioを使っとります。CRCを使って圧縮後のサイズを設定する方法もあるけど、それはまた今度。