首页 > 解决方案 > Files.isHidden C:\\ 在 Windows 上的 JDK12 和 JDK13 之间更改

问题描述

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

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

有谁知道这是为什么?

标签: javajava-13

解决方案


如前所述,行为上的差异是由于修复了一个错误: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

推荐阅读