将ZipEntry添加到没有ZipInputStream的ZipOutputStream时的java.util.zip.ZipException

时间:2014-01-31 21:15:07

标签: java byte zipoutputstream

我正在尝试向ZipEntry添加ZipOutputStream,但在尝试写入字节时遇到了问题。

我从ZipEntry获得HashMap,将文件名映射到ZipEntries。我之所以选择这种方法,是因为我正在处理大型ZipInputStream,我希望能够更轻松地访问其内容,而不是遍历InputStream并查找文件并获取其ZipEntry。< / p>

当我在添加条目后尝试写入字节时,这会导致问题。到目前为止我找到的所有解决方案都需要ZipInputStream

以下是代码:

ZipEntry ze = entryHash.get(pathToString(path));
zos.putNextEntry(ze);
zos.write(new byte[(int)ze.getSize()]); // Problem Here
zos.closeEntry();

我得到的错误是:

java.util.zip.ZipException: invalid entry compressed size (expected 389 but got 12 bytes)
    at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:248)

如何修复此异常?

1 个答案:

答案 0 :(得分:1)

您需要创建一个 new ZipEntry以添加到ZipOutputStream。但是你的代码没有任何意义。你不是用这种技术将旧的ZipEntry复制到输出,你只是编写一个相同大小的零字节数组。您必须从旧ZipEntry读取并写入新输出。你的ZipEntries地图技术也不会起作用。必须按顺序处理Zip文件。