ZipOutputStream の tips
ZipOutputStream はこんな感じで使うんだけど:
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("foo.zip")); zos.putNextEntry(new ZipEntry("")); zos.putNextEntry(new ZipEntry("bar.txt")); FileInputStream fos = new FileInputStream("bar.txt"); byte[] b = new byte[fos.available()]; fis.read(b); fis.close(); zos.write(b); zos.close();
やっちゃいけないのは以下の
zos.putNextEntry(new ZipEntry(""));
ルートフォルダをエントリに追加すること。
これをすると、例えばできあがった foo.zip をチェックすると
$ unzip -t foo.zip Archive: foo.zip : mismatching "local" filename (bar.txt), continuing with "central" filename version testing: OK testing: bar OK At least one warning-error was detected in foo.zip.
と警告が出てしまう。
ルート以外のフォルダは追加する必要があるので注意しよう。