【问题标题】:Closing of ZipInputStream works fine in IntelliJ, but fails in Maven with exceptionZipInputStream 的关闭在 IntelliJ 中工作正常,但在 Maven 中失败并出现异常
【发布时间】:2012-08-23 16:07:02
【问题描述】:

我有问题。当我通过 IntelliJ 运行当前代码时,它可以正常工作, 但是当我在 maven 3 中运行它时它会失败并出现异常。

 public static boolean isZipContent(InputStream inputstream) throws IOException {
    BufferedInputStream bis = new BufferedInputStream(inputstream);
    ZipInputStream zis = new ZipInputStream(bis);
    ZipEntry ze = zis.getNextEntry();
    if (ze == null) {
        return false;
    }
    zis.closeEntry();
    zis.close();
    bis.close();
    return true;
}

例外:

java.util.zip.ZipException:无效的文字/长度设置 在 java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) ~[na:1.7.0_06] 在 java.util.zip.ZipInputStream.read(ZipInputStream.java:193) ~[na:1.7.0_06] 在 java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:139) ~[na:1.7.0_06]

当我使用 WinZip 或其他方式手动打开 Zip 文件时,它们看起来还不错 - 正如我所说,一切都在 IntelliJ 中完美运行。

我已经调试并检查了文件编码、类加载器和一切,一切看起来都一样,但如果我使用 Maven3 运行测试,代码仍然会始终失败,但在 IntelliJ 中可以工作。

在 zis.closeEntry() 上失败;有一个例外。 我已确保在调试期间流仍处于打开状态。

我在 Win7 上使用 Java 1.6。 Maven 3.0.4。我尝试了其他版本的 Java,结果相同。

有人知道发生了什么吗?

【问题讨论】:

  • 您在这两种情况下使用的是同一个 zip 文件吗?你是如何创建它的?如果您没有使用 WinZip 创建它,请尝试使用 WinZip 创建一个 zip 文件并使用该 zip 文件。 WinZip 会尽可能地更正 zip 文件,因此您可以使用 WinZip 查看 zip 并不能保证它是一个好的 zip 文件。
  • 是的,它是同一个 zip 文件。它是由某个程序创建的。请注意,这在 IntelliJ 中运行时有效,因此 zip 文件可能不是问题...

标签: java zip


【解决方案1】:

您不需要 closeEntry(),因为您对下一个不感兴趣。去掉它。你也不需要 bis.close():它已经被 zis.close() 关闭了。

【讨论】:

    【解决方案2】:

    问题是 Zip 文件损坏...

    让我失望的是所有条目的目录看起来都很好,因此我认为 Zip 文件很好。

    一旦我尝试实际解压缩其中一个文件,它就失败了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-29
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2021-04-22
      相关资源
      最近更新 更多