Windows上的JDK12和JDK13之间更改了Files.isHidden C:\\

时间:2019-09-30 13:32:25

标签: java java-13

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

但是在同一台JDK 12计算机上返回false。

有人知道为什么吗?

2 个答案:

答案 0 :(得分:6)

这是bug,已用JDK 13修复。

  

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

release notes

答案 1 :(得分:5)

正如已经提到的,行为上的差异是由于修复了一个错误:JDK-8215467。该错误的说明说明,在修复之前,Files#isHidden(Path)的结果与Windows上的其他核心软件(例如 File Explorer PowerShell ,< em> CMD 等)。不一致之处在于Windows中的目录当然可以隐藏,但是Java(或至少是NIO2)则相反。

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

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

即使在Java 12及更高版本中(至少在Windows 10 Home计算机上也是如此),您将看到true打印出来。

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

PS C:\> $root = Get-Item "C:\"
PS C:\> $root.Attributes
Hidden, System, Directory