2013-05-01 38 views
0

我想在Eclipse中打開一個ZipFile,即在從Eclipse導出項目後的.jar中。這是我寫的代碼:試圖在jar中訪問ZipFile時出現FileNotFoundException

String modpath = "/ModByDNSYeti.zip"; 
URL url = this.getClass().getResource(modpath); 

ZipFile newTextures = new ZipFile(url.toString()); 

如果我執行的罐子,我得到一個

FileNotFoundException異常:文件: 「路徑」

其中 「路徑」 是確切的ZipFile所在的路徑。它在那裏。到現在爲止我檢查了一次,但我無法弄清楚該怎麼做。從Eclipse啓動程序時出現同樣的錯誤。谷歌也沒有讓我到任何地方。

問候 DNSYeti

回答

1

您試圖訪問資源的文件,這是行不通的 - 這就是爲什麼你得到FileNotFound例外。你可以做的就是搶資源作爲流,並用它來創建一個ZipInputStream:

ZipInputStream zipInStream = new ZipInputStream(this.getClass().getResourceAsStream(modpath)); 

然後,您可以使用ZipInputStream來讀取ZIP文件。

+0

感謝您的解答,但我有一個後續問題: – DNSYeti 2013-05-01 16:13:11

+0

在該方法的其餘部分,兩個ZipFiles合併爲一個ZipOutputStream。我可以簡單地用ZipInputStream替換ZipFiles中的一個,但這會導致另一個問題:我想讓ZipInputStream覆蓋由ZipFile放入ZipOutputStream的任何Entrys。由於我實際上無法刪除ZipOutputStream中的任何項目,因此我必須檢查覆蓋ZipFile是否包含該文件,如果存在,請不要讓被覆蓋的ZipFile將其放入流中。當覆蓋File是ZipInputStream時,這不起作用。 – DNSYeti 2013-05-01 16:13:39

+0

如果你需要隨機訪問zip,ZipInputStream確實不是很有幫助。在這種情況下,您可能會考慮不要將.zip文件放入.jar文件,而是將它們與.jar本身一起運輸。或者,您可以基本上將.zip從.jar複製到臨時文件,然後使用「ZipFile(String)」進行隨機訪問。 – Marco 2013-05-01 16:27:05

相關問題