6

Files.isHidden(Path.of("c:\\"))在 Windows 10、JDK 13 上返回 true

但在 JDK 12 同一台机器上返回 false。

有谁知道这是为什么?

4

2 回答 2

6

如前所述,行为上的差异是由于修复了一个错误:JDK-8215467。该错误的描述解释说,在修复之前,结果Files#isHidden(Path)与 Windows 上的其他核心软件(例如文件资源管理器PowerShellCMD等)不一致。不一致之处在于 Windows 中的目录当然可以被隐藏,但 Java(或至少 NIO2)却不这么认为。

在对该问题的评论中指出,结果也与java.io.File#isHidden(). 事实上,如果你使用:

File file = new File("C:\\");
System.out.println(file.isHidden());

true即使在 Java 12 和更早版本(至少我在我的 Windows 10 Home 机器上),你也会看到打印出来的。

被报道为隐藏的事实C:\对我来说似乎是正确的。如果我检查PowerShellC:\中的属性,它会将目录显示为隐藏。

PS C:\> $root = Get-Item "C:\"
PS C:\> $root.Attributes
Hidden, System, Directory
于 2019-09-30T14:18:46.560 回答
6

这是 JDK 13 修复的错误

在 Microsoft Windows 上,java.nio.file.Files.isHidden 方法历来忽略了目录上的 DOS“隐藏”属性。此版本已修复此问题,因此 isHidden 现在在调用以测试具有此属性集的目录时返回 true。

发行说明

于 2019-09-30T13:37:30.737 回答