2016-07-14 9 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からZIPファイルを作成するために結ばれたが、成功しませんでした。問題は - 内部のZipFileからどのようにエントリを取得できますか?

+0

正しく動作しない関連コードを共有してください。 – user861594

+0

参照http://stackoverflow.com/questions/11287486/read-a-zip-file-inside-zip-file – Unknown

+0

ありがとう!私はその記事を見ましたが、今これがまさに私の問題であることに気付きました。 –

答えて

0

あなたが歩いているすべてのレイヤーに「子供がいますか」をチェックする必要があります。本当に必要な場合は、さらに深く踏み込む必要があります。もう子どもがいなくなると、あなたは内容を読んで兄弟を探します。もし兄弟がいるならば - うーん。さもなければあなたの再帰的なmethdはそこで終わり、再帰的な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 ここでジップを作成し、内側のZipFileから " 親 - > tempFile = File.createTempFile( "tempFile"、 "zip"); 子 - > innerZipFile =新しいZipFile(tempFile); 子エントリの読み込み - >列挙型<? extends ZipEntry> entries = innerZipFile.entries(); while(entries.hasMoreElements()) – Daddelbob

+0

ありがとう、それは私が探していたものです! –

関連する問題