2016-07-14 50 views
0

得到一個小問題。我有一個未知結構的ZipFile。我必須在控制檯上打印所有文件條目。主要的問題是這個主ZipFile可能包含'sub'ZipFiles,並且這些子ZipFiles可能包含它們自己的ZipFiles等等。我只需要查看所有文件條目,但現在提取它們。 我試圖使用ZipFile和ZipInputStream,但沒有成功。 有人能幫助我嗎?遞歸讀取ZipFile不提取(Java)

public void showTree(ZipFile file) { 
    try { 
     ZipEntry entry; 
     Enumeration<? extends ZipEntry> entries= file.entries(); 
     while ((entry = entries.nextElement()) != null) { 
      if (entry.getName().matches(".+(zip)$")) { 
       ZipFile z = new ZipFile(entry.getName()); //DOES NOT WORK!!!!!! 
       showTree(z); 
      } 
      System.out.println(entry.getName()); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

這裏是我的代碼,我綁創建entry.getName的ZipFile()(不顯着工作),但沒有成功。問題是 - 我如何從ZipFile內部獲取條目?

+0

請問您能否分享一些不正確的相關代碼? – user861594

+0

請參閱http://stackoverflow.com/questions/11287486/read-a-zip-file-inside-zip-file – Unknown

+0

謝謝!我看到那篇文章,但現在意識到這正是我的問題。 –

回答

0

您需要爲每一層檢查「有孩子」,如果屬實,則需要深入一步。一旦它沒有更多的孩子,你閱讀內容並尋找兄弟姐妹。如果有兄弟姐妹 - 好吧:進入他們。否則你的遞歸方法就會在那裏結束,並跳出遞歸的metohd的上層調用。

zipFile.recursiveMethod()或者recursiveMethod(zipFile)啓動邏輯。 Like:

recursiveMethod(params) 
{ 
    if(hasChild) 
    { 
     child.recursiveMethod(); 
    } 
    // in deepest childObject 
    readContent(); 
    if(hasSibling) 
    { 
     sibling.recursiveMethod(); 
    } 
} 
+0

謝謝,但這不完全是我的問題。我附加了一些附加說明的代碼。 –

+0

@Unknown張貼正確的解決方案,您的問題與他的推薦到 http://stackoverflow.com/questions/11287486/read-a-zip-file-inside-zip-file 那裏你創建zip和「獲取條目從內部ZipFile「。父親 - > tempFile = File.createTempFile(「tempFile」,「zip」); Child - > innerZipFile = new ZipFile(tempFile); 閱讀子條目 - >枚舉<?擴展ZipEntry> entries = innerZipFile.entries(); while(entries.hasMoreElements()){code} – Daddelbob

+0

謝謝,那就是我一直在尋找的! –