我有一堆文件,例如4个文件。我想将2个文件压缩为一个压缩文件,例如“ inner.zip”,其余的压缩为“ outer.zip”的父目录。
即
InputStream streamToReadFile=readFile(filePath);
String zipEntryName = folderName + "/" + fileNameToWrite;
ZipEntry anEntry = new ZipEntry(zipEntryName);
// I couldn't able to create zip in a zip file.
streamToWriteInZip.putNextEntry(anEntry);
while ((bytesIn = streamToReadFile.read(readBuffer)) > 0) {
streamToWriteInZip.write(readBuffer, 0, bytesIn);
}
内ZipOutputStream应该调用finish()
,而不是close()
因为finish()
会将所有压缩数据,但不会关闭外拉链。要测试close()
一个文件的错误性,您需要添加另一个文件,因为内部zip文件是最后一个文件。
Path sourcePath = Paths.get("C:/D/test.html");
try (ZipOutputStream zipOut = new ZipOutputStream(
new FileOutputStream("C:/D/test/test.zip"))) {
zipOut.putNextEntry(new ZipEntry("file1.txt"));
Files.copy(sourcePath, zipOut);
zipOut.closeEntry();
zipOut.putNextEntry(new ZipEntry("file2.txt"));
Files.copy(sourcePath, zipOut);
zipOut.closeEntry();
zipOut.putNextEntry(new ZipEntry("inner.zip"));
ZipOutputStream innerZipOut = new ZipOutputStream(zipOut);
{
innerZipOut.putNextEntry(new ZipEntry("file3.txt"));
Files.copy(sourcePath, innerZipOut);
innerZipOut.closeEntry();
innerZipOut.putNextEntry(new ZipEntry("file4.txt"));
Files.copy(sourcePath, innerZipOut);
innerZipOut.closeEntry();
innerZipOut.finish(); // Instead of close().
}
zipOut.closeEntry();
} catch (IOException e) {
e.printStackTrace();
} // Invoke close().
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句