2013-02-16 526 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