2014-09-03 80 views
0

我有一個zip文件(x.zip),其中有另一個zip文件(y.zip)。我需要在y.zip中讀取一個文件。我如何迭代兩個zip文件來讀取文件?如何使用ZipEntry讀取位於另一個zip文件中的一個zip文件中的數據?

我用來迭代x.zip來讀取y.zip的代碼如下。

在代碼中,「zipX」代表「x.zip」。當遇到「y.zip」時,它滿足代碼中的「if條件」。在這裏,我需要遍歷「zipEntry」並在其中讀取文件。

這是如何實現的?

private void getFileAsBytes(String path, String name) throws IOException { 
     ZipFile zipX = new ZipFile(path); 
     Enumeration<? extends ZipEntry> entries = zipX.entries(); 
     while (entries.hasMoreElements()) 
     { 
      ZipEntry zipEntry = entries.nextElement(); 
      if(zipEntry.getName().contains(name) && zipEntry.getName().endsWith(".zip")) { 
       InputStream is; 
       is = zipX.getInputStream(zipEntry); 
       // Need to iterate through zipEntry here and read data from a file inside it. 
       break; 
      } 
     } 
     zipX.close(); 
} 
+0

怎麼樣用遞歸方法,直到結束? – Vikram 2014-09-03 22:18:49

+1

在['ZipInputStream'](http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipInputStream.html)中包裝內部InputStream並將其讀爲普通zip文件「... – MadProgrammer 2014-09-03 22:19:07

+0

@MadProgrammer如果Y.zip裏面有另一個zip文件呢?他需要繼續繼續if/else塊。 – Vikram 2014-09-03 22:24:15

回答

1

根據ZipFile docs,你需要傳入一個File對象或文件路徑; InputStream不受支持。

考慮到這一點,你可以說的InputStream寫入到一個臨時文件,然後傳遞文件到您現有的方法:

... 
is = zipX.getInputStream(zipEntry); 
File tmpDir = new File(System.getProperty("java.io.tmpdir")); 
//For production, generate a unique name for the temp file instead of using "temp"! 
File tempFile = createTempFile("temp", "zip", tmpDir); 
this.getFileAsBytes(tempFile.getPath(), name); 
break; 
... 
相關問題