2

我一直在使用 Java 7 的 ZipFS 支持。

https://gist.github.com/stain/5591420

显示行为,我觉得有点奇怪。基本上,您可以创建一个 ZIP 文件系统,创建一个具有给定名称的文件,然后还创建一个具有相同名称的文件夹。

这样做的原因似乎是在内部文件夹在其名称后面附加了“/” - 但是这个新名称没有返回,因此您最终会遇到一个奇怪的情况,即 Files.isDirectory() 在成功完成文件后立即返回 false。创建目录()。

try (FileSystem fs = tempZipFS()) {
        Path folder = fs.getPath("folder");
        Files.createFile(folder);
        assertTrue(Files.isRegularFile(folder));
        assertFalse(Files.isDirectory(folder)); 
//        try {
            Files.createDirectory(folder);
//        } catch (FileAlreadyExistsException ex) {              
//                Is not thrown!
//        }

        // but a second createDirectory() fails correctly
        try {
            Files.createDirectory(folder);
        } catch (FileAlreadyExistsException ex) {               
        }

        // Look, it's both a file and folder! 
        Path child = folder.resolve("child");
        Files.createFile(child);

        // Can this be tested?
        assertTrue(Files.isRegularFile(folder));
        // Yes, if you include the final /
        assertTrue(Files.isDirectory(fs.getPath("folder/")));
        // But not the parent
//          assertTrue(Files.isDirectory(child.getParent()));
        // Or the original Path
//          assertTrue(Files.isDirectory(folder));
    }

因此,只要您有“/”作为后缀,您甚至可以同时使用两者,如果您对根目录进行目录列表,这就是它们的列出方式。

现在 ZIP 格式本身允许这样做,因为它只处理 ZIP 文件中的条目(甚至允许多个具有相同名称的条目),但是正常使用“文件系统”通常不允许多个具有相同名称的条目;当我尝试创建文件夹两次时可以看出。

生成的 ZIP 文件可以用 infozip、7Zip 和 Windows 8 正确浏览;但是尝试解压缩显然会失败,因为本机文件系统不支持这种二元性。

那么这是一个功能,错误还是介于两者之间的东西?

4

0 回答 0