0

我有个问题。当我通过 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,结果相同。

有谁知道发生了什么?

4

2 回答 2

0

问题是一个损坏的 Zip 文件...

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

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

于 2012-08-23T08:07:02.063 回答
0

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

于 2012-08-17T18:19:52.553 回答