【问题标题】:Java 8 zipfile > 4 GB . ZipException: invalid CEN header (bad signature)Java 8 压缩文件 > 4 GB 。 ZipException:无效的 CEN 标头(错误的签名)
【发布时间】:2016-09-27 12:04:46
【问题描述】:

我在 zipfile 上使用 java 1.8.0_60 时遇到此错误 > 4 GB

我发现应该可以通过 zip64 实现。

ZipFile zipFile = new ZipFile(zippedFile);

错误:

java.util.zip.ZipException: invalid CEN header (bad signature)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:219)

我应该以另一种方式获取条目以使用 zip64 吗?

【问题讨论】:

  • 你可以试试java zip filesystem - 会很有趣。
  • 如果生成的 zip 文件格式错误(如您所见),那么最可能的原因是您没有关闭文件。
  • @OldCurmudgeon: zip 文件有效
  • @JoopEggen: zip > 4 GB with java zip filesystem 的相同错误

标签: java zip


【解决方案1】:

我会这样做:

FileInputStream fInput = new FileInputStream(zipFileName);
ZipInputStream zipInput = new ZipInputStream(fInput);
ZipEntry entry = zipInput.getNextEntry();

while(entry != null){
  String entryName = entry.getName();
  File file = new File(destinationFolder + File.separator + entryName);

  // Do whatever you need with the file here
}

大文件的跨主题:Read large files in Java

【讨论】:

  • 这样做没有错误。谢谢。我投了赞成票,但显然我还没有足够的声誉来看到它。
  • 我进一步尝试并发现了一些性能问题。我只是对获取 zipentries 感兴趣。使用“new ZipFile(file)”我可以立即得到它们。通过流我得到的印象是它加载整个文件以获取条目。你知道如何继续还是我应该打开一个新线程?
  • 所以您不想阅读条目中的内容,而只想阅读压缩文件的列表?
  • 对,首先我必须知道该条目的名称,然后再对其进行操作。然后我用一些条目制作一个流并将它们传递给数据库。
猜你喜欢
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
相关资源
最近更新 更多