2

Java 7 の ZipFS サポートを使用しています。

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

少し奇妙に感じる動作を示しています。基本的に、ZIP ファイル システムを作成し、任意の名前のファイルを作成し、さらに同じ名前のフォルダーを作成できます。

この理由は、内部的にフォルダーの名前に「/」が追加されるためと思われますが、この新しい名前は返されないため、ファイルが成功した直後に Files.isDirectory() が false を返すという奇妙な状況になります。 createDirectory()。

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 ファイル内のエントリのみを処理するため (同じ名前の複数のエントリを許可する場合でも)、これを許可していますが、「FileSystem」の通常の使用では、通常、同じ名前の複数のエントリは許可されません。フォルダを2回作成しようとするとわかるように。

生成された ZIP ファイルは、infozip、7Zip、および Windows 8 で正しく参照できます。しかし、ネイティブ ファイル システムはそのような二重性をサポートしていないため、解凍しようとすると明らかに失敗します。

これは機能ですか、バグですか、それともその中間ですか?

4

0 に答える 0