2010-11-01 77 views
2

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

问候,Anoop

回答

3

最后我发现了这个问题。它与路径有关。它真的很有趣,但如果你给zipoutputstream压缩文件的绝对路径,这个错误发生。我尝试了相对路径和BINGO!有效。因此,我在压缩之前做了一些工作,并将文件的父项指向当前工作目录,然后进行压缩。感谢所有的答复。

+0

你还记得完整的道路,想和我们分享吗?也许这条特别的道路是有启发性的。 – 2011-04-05 15:47:17

2

您所看到的Windows的安全功能保护你,不是指示的文件不正确。很可能是因为它发现你的zip文件很奇怪。 7zip能否正确打开文件?

+1

日Thnx的人,但我不会在我的工作站有7zip的。尝试与WinZip和它也失败了。有趣的是,我可以使用java本身解压缩。我不知道窗户是否像不守信的那样处理文件。 – Anoop 2010-11-01 06:59:53

1

创建该文件的Java进程是否仍在运行?如果是的话,它可能会保持打开的zip文件,这在Windows上通常意味着没有其他进程可以读取它。你的代码应该是这样的:

OutputStream os = new FileOutputStream("reports.zip"); 
try { 
    ZipOutputStream zos = new ZipOutputStream(os); 
    ... 
} finally { 
    os.close(); 
} 
+0

嗨罗兰,thnx 4的回复。我正在关闭输出流以及zipoutputstream和zipentry。 :( – Anoop 2010-11-01 06:57:05

+0

这给出了一个不同的错误信息。 – 2010-11-01 07:47:38

3

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

Anoop关于绝对路径的最新评论帮助我找到了问题。由于在搜索几篇文章中我没有看到答案,所以我想在这里发布它 - 实际上是回应Roland的最后一个问题:

问题是当我使用ZipEntry(文件)和完全限定的路径/文件时的相对路径。我无法使用任何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等打开。

希望它可以帮助未来的人。

感谢, 克里斯

相关问题