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 で正しく参照できます。しかし、ネイティブ ファイル システムはそのような二重性をサポートしていないため、解凍しようとすると明らかに失敗します。
これは機能ですか、バグですか、それともその中間ですか?