簡體   English   中英

來自 ZipEntry 的 RandomAccessFile (java)

[英]RandomAccessFile from ZipEntry (java)

我正在尋找有關通過 RandomAccessFile 讀取 zip 檔案的內容。 所以,我找到了這個例子: http ://www.java2s.com/Code/JavaAPI/java.io/RandomAccessFilereadLine.htm 但是它對我不起作用,它告訴我沒有這樣的文件或目錄,但是文件-路徑是正確的。 這個例子不正確嗎?

更新:來自 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

我認為在這種情況下,未經審查的代碼會出現在 Internet 上並導致無窮無盡的問題。

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

總之:您不能將 RAF 與 ZipEntry 一起使用,因為 ZipEntry 指的是加密流。 您不能對流進行隨機訪問(除非您緩沖整個內容)。

這對我來說真的很有趣:

a) java-tips 文章中的代碼沒有遵循正確的 Java 命名約定 b) 兩篇文章中的代碼驚人地相似

下面是展示如何正確使用 ZipInputStream 的示例代碼

使用 NIO.2 文件 API (Java 7),處理 zip 文件變得更加容易。

嘗試(未經測試):

try (FileSystem zipFS =  FileSystems.newFileSystem(URI.create("jar:" + zipURI), Map.of())) {  
    Path targetInZipPath = zipFS.getPath(targetInZipPathString);  

    // do something here 
}   

在此處閱讀有關 ZIP 文件系統(JDK 模塊 jdk.zipfs)的更多信息: https ://docs.oracle.com/en/java/javase/17/docs/api/jdk.zipfs/module-summary.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM