2

嗨,我是 android 编程新手。

我正在尝试创建一个程序来解压缩我的 sd 卡中的压缩文件,我在调试时注意到了一些东西。

public void testZipOrder() throws Exception {
            File file = new File(_zipFile);
            zis = new ZipInputStream(new FileInputStream(file));
            ZipEntry entry = null;
            while ( (entry = zis.getNextEntry()) != null ) {
             System.out.println( entry.getName());
            }
        }
    } 

这给了我一个输出:

06-27 00:42:06.360: I/System.out(15402): weee.txt
06-27 00:42:06.360: I/System.out(15402): hi/bye.txt
06-27 00:42:06.360: I/System.out(15402): hi/hiwayne.txt

是不是应该给

weee.txt
hi/
hi/bye.txt
hi/hiwayne.txt

还是显示其文件夹的东西?

4

2 回答 2

1

我使用 7zip 创建的测试 zip 文件和以下方法在自己的环境中进行了尝试:

public void testZipOrder() throws Exception {
    File file = new File("zip.zip");
    ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
    ZipEntry entry = null;
    while ( (entry = zis.getNextEntry()) != null ) {
     System.out.println( entry.getName());
    }
    zis.close();
}

请注意,此方法实际上与您的方法相同。

结果输出是:

file1.txt
folder1/
folder1/file2.txt
folder1/folder2/
folder1/folder2/file3.txt

我相信,这就是您正在寻找的东西。因此,我预计问题出在 zip 文件本身,而不是您的代码。您的 zip 文件可能不包含目录“hi/”的条目。

有关zip 文件结构的基本描述,请参见此处。

于 2013-06-26T19:04:50.537 回答
0

ZIP 规范不需要文件及其父目录在 zip 文件中的有序“放置”,实际上父目录条目可以完全不存在

https://bugs.openjdk.java.net/browse/JDK-8054027

于 2018-06-06T18:13:27.030 回答