4

我创建了一个小应用程序来从磁盘读取一些文件并使用 java.util.zip.ZipOutputStream 对其进行压缩。它正在成功创建 zip 文件。但是在 Windows 中,当我尝试打开它/解压缩它时,会收到错误消息,例如“Windows 已阻止访问这些文件以帮助保护您的计算机”。我只压缩 csv 文件。但是,如果我尝试使用 java 本身的 zipinputstream 类解压缩,它会正确解压缩它。任何人都可以对此有所了解。

问候,阿努普

4

5 回答 5

4

我知道这篇文章是几年前的。但是,我在第一次使用 java.util.zip 时遇到了非常相似的问题,这篇文章引导我解决了这个问题。

Anoop 关于绝对路径的最后评论帮助我找到了问题所在。由于搜索了好几篇帖子都没有看到答案,所以想在这里贴出来——其实是在回复罗兰的最后一个问题:

问题是当我使用带有完全限定路径/文件而不是相对路径的 ZipEntry(file) 时。我无法使用我的任何 Windows 操作系统实例打开生成的 ZIP。但是,我可以使用 Java 再次提取文件。直到我用 7zip 打开 zip 后我才意识到这个问题。我的 result.zip 文件中的第一个文件夹是“D:”。我的目录是我的 D 驱动器下的一条长路径。因此,当打开我的“Results.zip”文件时,在单击 zip 文件(来自 7zip)中的目录树后,我会看到以下内容:Results.zip\D:\Apps\vertigo\instance5\runtime\myManager\discoveryResources\数据

“数据”目录实际上保存了我压缩的所有文件/目录。

当我从数据目录中剥离路径时,Results.zip 以“data”而不是“D:”开头。并且可以使用 Windows 7、2012 等打开该文件。

希望它对将来的人有所帮助。

谢谢,-克里斯

于 2015-04-25T22:53:15.307 回答
4

最后我发现了问题。它与路径有关。它真的很有趣,但是如果你提供要压缩到 zipoutputstream 的文件的绝对路径,就会发生这个错误。我尝试使用相对路径和宾果游戏!!!有效。因此,我在压缩之前做了一些工作,并将文件的父级指向当前工作目录,然后进行压缩。感谢大家的回复。

于 2010-11-01T09:41:50.533 回答
2

您看到的是 Windows 的安全功能保护您,而不是表明文件不正确。很可能是因为它发现您的 zip 文件很奇怪。7zip可以正确打开文件吗?

于 2010-11-01T06:42:59.963 回答
1

尝试在 OTN在同一文件中保存和加载多个图像时出现问题中显示的代码。刚刚再次测试了代码,当我通过双击文件打开 images.zip 时,Windows 显示的内容很好。

于 2010-11-01T07:26:02.930 回答
1

创建文件的 Java 进程是否仍在运行?如果是,它可能使 zip 文件保持打开状态,这在 Windows 上通常意味着没有其他进程可以从中读取。您的代码应如下所示:

OutputStream os = new FileOutputStream("reports.zip");
try {
  ZipOutputStream zos = new ZipOutputStream(os);
  ...
} finally {
  os.close();
}
于 2010-11-01T06:45:56.370 回答