2010-11-01 177 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等打開。

希望它可以幫助未來的人。

感謝, 克里斯

相關問題