4

紛らわしいタイトルですみません。基本的に、たくさんの.txtファイルが含まれているZipFileがありますが、フォルダーも1つあります。以下に示すコードは、zip エントリでそのフォルダーを見つけることです。私はこの部分をうまくやった。問題は、フォルダーを見つけたら、それが ZipEntry であることです。そのフォルダー内のエントリを取得するための便利な方法はありません。見つけたフォルダーには、処理したい .txt ファイルがさらに含まれています (これが主な目標です)。

zipFile = new ZipFile(zipName);
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while(entries.hasMoreElements()){
    ZipEntry current = entries.nextElement();
    if(current.getName().equals(folderName)) {
         assertTrue(current.isDirectory());
        //Here is where I want to get the files in the folder 
    }
}
4

3 に答える 3

4

ZipEntryメソッドisDirectory()を持っています

これがディレクトリ エントリの場合は true を返します。ディレクトリ エントリは、名前が「/」で終わるエントリとして定義されます。

あなたがしたいことは、すべてのエントリを(あなたがやっているように)繰り返し処理しInputStream、ディレクトリ内にあるものを取得することです。ディレクトリからの相対パスを持つもの。

folderNameの値がで"/zip/myzip/directory"あるとすると、そのディレクトリ内のファイルの名前は"/zip/myzip/directory/myfile.txt". Java NIO Pathapi を使用して支援することができます

Path directory = Paths.get("/zip/myzip/directory"); // you get this directory path from the ZipEntry
Path file = Paths.get(current.getName());
if (file.startsWith(directory)) {
   // do your thing
}

あなたはとして得ることができInputStreamます

zipFile.getInputStream(current);

Zip ファイル内のパスは、Zip の場所のルートからの相対パスになることに注意してください。郵便番号が

C:/Users/You/Desktop/myzip.zip

次のようなパスを表示するzip内のフォルダー

directory/
于 2013-08-16T18:49:22.713 に答える
-3

実はもっと簡単な方法があります。現在のエントリがディレクトリであることがわかっている場合、ZipInputStream を使用すると、次の要素は自動的にそのディレクトリにあるものになります。たとえば、ディレクトリ構造が次のようになっているとします。

Dir1/A.txt Dir1/B.txt Dir2/C.txt D.txt

次に、上記の 3 つすべてにアクセスするには、次のようにするだけです。

ZipInputStream Zis = new ZipInputStream(in);
ZipEntry entry = Zis.getNextEntry();
while (entry != null) {
    if(!entry.isDirectory)
       //do something with entry  
    //else continue  
    entry = Zis.getNextEntry(); 
}

これは、すべてのファイルを(リストされている順序で)反復処理し、それらがディレクトリであるかどうかを明示的に確認する必要はありません。

于 2016-04-29T01:47:42.427 に答える
-3

そのような何かがあなたを助けるかもしれません

final ZipFile zf = new ZipFile(filename);
for (final Enumeration<? extends ZipEntry> e = zf.entries(); e.hasMoreElements();) {
final ZipEntry ze = e.nextElement();
if (!ze.isDirectory()) {
     final String name = ze.getName();
     //.....
    }
}

楽しめ ;-)

于 2014-03-24T15:52:46.210 に答える