2013-02-16 79 views
0

我檢查過java api文檔,它表示getNextEntry()讀取下一個ZIP文件條目並將流定位在條目數據的開頭。getNextEntry()是做什麼的?

這是什麼意思「讀取下一個zip文件」?爲什麼「下一個」?

我有這樣的一段代碼,這是什麼線ze = zin.getNextEntry()點?

public void unzip() { 
    try { 
     FileInputStream fin = new FileInputStream(_zipFile); 
     ZipInputStream zin = new ZipInputStream(fin); 
     ZipEntry ze = null; 
     while ((ze = zin.getNextEntry()) != null) { 
     Log.v("Decompress", "Unzipping " + ze.getName()); 

     if(ze.isDirectory()) { 
      _dirChecker(ze.getName()); 
     } else { 
      FileOutputStream fout = new FileOutputStream(_location + ze.getName()); 
      for (int c = zin.read(); c != -1; c = zin.read()) { 
      fout.write(c); 
      } 

      zin.closeEntry(); 
      fout.close(); 
     } 

     } 
     zin.close(); 
    } catch(Exception e) { 
     Log.e("Decompress", "unzip", e); 
    } 

    } 
+0

你可以檢查我的更新問題?爲什麼這個示例代碼在開始時會放入'ze = zin.getNextEntry()'?所以它開始從zip中的第二個文件解壓縮? – Jolin 2013-02-16 20:04:24

回答

6

它讀取壓縮文件中的下一個進入

一個zip文件邏輯上包含主要的其他文件 - 所以foo.zip可以包含文件a.txtb.txtgetNextEntry()將您轉移到存檔中的下一個文件。

(我從來沒有特別喜歡的是ZipInputStream使用繼承從InputStream建模的方法,但是這是一個不同的問題。)

+0

因此,如果我開始解壓縮包含a.txt,b.txt的myfolder.zip,如果我調用ze = zin.getNextEntry(),它將移動到b.txt並繞過a.txt?那麼最開始寫'ze = zin.getNextEntry()'有什麼意義呢? (我更新了我的問題,並在那裏發佈了考試代碼) – Jolin 2013-02-16 20:01:12

+0

@Jolin:是的。 (雖然你的意思是需要調用'getNextEntry()'來移動到第一個入口 - 我不記得那樣) – 2013-02-16 20:01:53

+0

(Re:繼承,我認爲它只是使我們在九十年代看起來更性感。) – 2013-02-16 21:25:00