2016-07-14 40 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

谢谢,那就是我一直在寻找的! –