【问题标题】:java.util.zip.ZipException when adding a ZipEntry to a ZipOutputStream without a ZipInputStream将 ZipEntry 添加到没有 ZipInputStream 的 ZipOutputStream 时出现 java.util.zip.ZipException
【发布时间】:2014-01-31 21:15:06
【问题描述】:

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

我从HashMap 获得了ZipEntry,它将文件名映射到它们的ZipEntries。我选择这种方法是因为我正在处理一个大的ZipInputStream,并且我希望能够比循环通过InputStream 并查找文件并获取它的ZipEntry 更容易访问它的内容。

当我在添加条目后尝试写入字节时,这会导致问题。到目前为止我发现的所有解决方案都需要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)

如何解决这个异常?

【问题讨论】:

  • 那有什么问题呢?
  • 此时您需要编写文件...
  • java.util.zip.ZipException: 无效的条目压缩大小(预期为 389 但得到 12 个字节)是我的错误。写文件是什么意思?你的意思是关闭 ZipOutputStream?在我这样做之前我想添加更多。感谢您的快速回复!

标签: java byte zipoutputstream


【解决方案1】:

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

【讨论】:

  • 好吧,这是有道理的。我有一种感觉,我错过了一个大概念。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多