ZipInputStream.getNextEntry() 如何工作?

2022-09-02 11:47:49

假设我们有这样的代码:

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

假设您有一个包含以下内容的 .zip 文件:

  • 邮编1.zip
    • 你好.c
    • 世界.java
    • 文件夹1
      • foo.c
      • 酒吧.java
    • foobar.c

zis.getNextEntry() 将如何迭代?

它会返回hello.c,world.java,folder1,foobar.c并完全忽略category1中的文件吗?

或者它会返回hello.c,world.java,folder1,foo.c,bar.java,然后是foobar.c?

它甚至会返回 folder1,因为它在技术上是一个文件夹而不是一个文件?

谢谢!


答案 1

井。。。让我们看看:

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

输出:

新建文件夹/

新建文件夹/文件夹1/

新建文件夹/文件夹1/栏.java

New Folder/folder1/foo.c

New Folder/foobar.c

新建文件夹/你好.c

新建文件夹/世界.java


答案 2

是的。它还将打印文件夹名称,因为它也是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());
        }
    }
}

推荐