18

次のようなコードがあるとします。

File file = new File("zip1.zip");
ZipInputStream zis = new ZipInputStream(new FileInputStream(file));

次の内容を含む.zipファイルがあると仮定します。

  • zip1.zip
    • こんにちはC
    • world.java
    • folder1
      • foo.c
      • bar.java
    • foob​​ar.c

zis.getNextEntry()はそれをどのように繰り返しますか?

hello.c、world.java、folder1、foobar.cを返し、folder1のファイルを完全に無視しますか?

または、hello.c、world.java、folder1、foo.c、bar.java、そしてfoobar.cを返しますか?

技術的にはファイルではなくフォルダであるため、folder1を返すことさえありますか?

ありがとう!

4

4 に答える 4

25

さて...見てみましょう:

        ZipInputStream zis = new ZipInputStream(new FileInputStream("C:\\New Folder.zip"));
        try
        {
            ZipEntry temp = null;
            while ( (temp = zis.getNextEntry()) != null ) 
            {
             System.out.println( temp.getName());
            }
        }

出力:

新規フォルダ/

新しいフォルダ/folder1/

新しいフォルダ/folder1/bar.java

新しいフォルダ/folder1/foo.c

新しいフォルダ/foobar.c

新しいフォルダ/hello.c

新しいフォルダ/world.java

于 2012-08-02T19:19:07.027 に答える
16

はい。zip 内のエントリでもあるため、フォルダー名も出力されます。また、zip 内に表示されている順序で印刷されます。以下のテストを使用して、出力を確認できます。

public class TestZipOrder {
    @Test
    public void testZipOrder() throws Exception {
        File file = new File("/Project/test.zip");
        ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
        ZipEntry entry = null;
        while ( (entry = zis.getNextEntry()) != null ) {
         System.out.println( entry.getName());
        }
    }
}
于 2012-08-02T19:13:21.553 に答える
1

抜粋: https://blogs.oracle.com/CoreJavaTechTips/entry/creating_zip_and_jar_files

java.util.zip ライブラリは、ZipOutputStream の追加エントリに対してある程度の制御を提供します。

まず、エントリを ZipOutputStream に追加する順序は、エントリが .zip ファイル内に物理的に配置されている順序です

ZipFile の entry() メソッドによって返されたエントリの列挙を操作して、アルファベット順またはサイズ順のリストを生成できますが、エントリは出力ストリームに書き込まれた順序で保存されます。

したがって、entries() メソッドを使用して、反復される順序を確認する必要があると思います。

 ZipFile zf = new ZipFile("your file path with file name");
    for (Enumeration<? extends ZipEntry> e = zf.entries();
    e.hasMoreElements();) {
      System.out.println(e.nextElement().getName());
    }
于 2012-08-02T19:13:30.967 に答える
1

zip ファイルの内部ディレクトリは、zip 内のすべてのファイルとディレクトリの「フラットな」リストです。 getNextEntryリストを繰り返し処理し、zip ファイル内のすべてのファイルとディレクトリを順番に識別します。

中央ディレクトリを持たない zip ファイル形式の変種があります。その場合 (それが処理される場合)、zip 内のすべての実際のファイルを反復処理し、ディレクトリをスキップします (ただし、ディレクトリ内のファイルはスキップしません)。

于 2012-08-02T19:19:09.243 に答える