2012-07-09 87 views
3

我正在尋找關於通過RandomAccessFile讀取zip檔案的內容。所以,我發現這個例子: 然而,它不適用於我,它告訴沒有這樣的文件或目錄,但文件路徑是正確的。這個例子不正確嗎?ZipEntry的RandomAccessFile(java)

UPDATE:從docs.oracle.com:

RandomAccessFile(String name, String mode)

創建一個隨機訪問文件流從讀取,並且可選地寫入,具有指定名稱的文件。

這很奇怪,他們試圖用entryName創建RAF在本例中,「名」參數

有與同樣的事情多了一個例子:http://www.java-tips.org/java-se-tips/java.util.zip/how-to-read-files-within-a-zip-file-3.html

+1

對於我來說,感覺你更有可能*得到了錯誤的文件名 - 很可能來自非轉義的反斜槓。你有沒有改變代碼*? – 2012-07-09 13:00:06

+0

不,我只是改變了這個字符串'ZipInputStream zipinputstream = new ZipInputStream(new FileInputStream(「filename」));' - 而不是'filename'我把'/ home/123456/archive.zip' – user1049280 2012-07-09 13:06:13

+0

我更新了問題 – user1049280 2012-07-09 13:09:55

回答

3

我認爲這是一個情況未經審查的代碼在互聯網上出現並導致無法解決的問題。

這兩個例子中的代碼沒有辦法做任何有用的事情。代碼執行任何操作的唯一方法是,如果zip文件的內容已經被提取到包含zip的文件夾中。

長與短:由於ZipEntry引用加密流,因此您無法在ZipEntry中使用RAF。你不能在一個流上進行隨機訪問(除非你緩衝了整個事物)。

這真的很有趣,我如何:

一)在Java的技巧文章的代碼沒有遵循Java B)兩篇文章中的代碼正確的命名約定是驚人相似

這裏的顯示如何正確使用ZipInputStream的示例代碼:http://java.sun.com/developer/technicalArticles/Programming/compression/