我创建了一个小应用程序来从磁盘读取一些文件并使用java.util.zip.ZipOutputStream压缩它。它成功创建了zip文件。但在Windows中,当我尝试打开它/解压缩它时收到错误消息,如“Windows已阻止访问这些文件,以帮助保护您的计算机”。我只压缩csv文件。但是,如果我尝试使用java本身的zipinputstream类解压缩,它正确解压缩它。任何人都可以对此有所了解。
问候,Anoop
答案 0 :(得分:4)
最后我发现了问题。它与路径有关。它真的很有趣,但是如果你把文件的绝对路径压缩到zipoutputstream,就会发生这个错误。我试过相对路径和BINGO !!!有效。因此我在压缩之前做了一些工作,并将文件的父节点指向当前工作目录,然后压缩。谢谢大家的回复。
答案 1 :(得分:4)
我知道这篇帖子是几年前的。但是,我第一次使用java.util.zip时遇到了类似的东西,这篇文章引导我解决这个问题。
Anoop关于绝对路径的最后评论帮助我找到了问题。由于我在搜索几个帖子时没有看到答案,我想在此发布 - 实际上回应了罗兰的最后一个问题:
问题是我使用ZipEntry(文件)时使用的是完全限定的路径/文件,而不是相对路径。我无法使用任何Windows操作系统实例打开生成的ZIP。但是,我可以使用Java再次提取文件。直到我用7zip打开拉链才意识到这个问题。 result.zip文件中的第一个文件夹是" D:"。我的目录是我D驱动器下的一条很长的路径。所以当打开我的" Results.zip"文件,这是我在点击zip文件中的目录树后看到的内容(来自7zip):Results.zip \ D:\ Apps \ vertigo \ instance5 \ runtime \ myManager \ discoveryResources \ data
"数据"目录实际上保存了我压缩的所有文件/目录。
当我从数据目录中删除路径时,Results.zip以" data"而不是" D:"。该文件可以使用Windows 7,2012等打开。
希望将来帮助某人。
谢谢, -Chris
答案 2 :(得分:2)
您看到Windows的安全功能可以保护您,而不是指示文件不正确。很可能是因为它发现你的zip文件很奇怪。 7zip可以正确打开文件吗?
答案 3 :(得分:1)
创建该文件的Java进程是否仍在运行?如果是,它可能会保持zip文件打开,这在Windows上通常意味着没有其他进程可以从中读取。您的代码应如下所示:
OutputStream os = new FileOutputStream("reports.zip");
try {
ZipOutputStream zos = new ZipOutputStream(os);
...
} finally {
os.close();
}
答案 4 :(得分:1)
尝试OTN上Problem saving and loading multiple images in a same file上显示的代码。刚刚再次测试了代码,当我通过双击文件打开images.zip时,Windows显示内容就好了。