Files.isHidden(Path.of("c:\\"))
在Windows 10,JDK 13上返回true
但是在同一台JDK 12计算机上返回false。
有人知道为什么吗?
答案 0 :(得分:6)
这是bug,已用JDK 13修复。
在Microsoft Windows上,java.nio.file.Files.isHidden方法在历史上一直忽略目录上的DOS“隐藏”属性。此版本已修复此问题,因此,在调用isHidden来测试设置了此属性的目录时,isHidden现在返回true。
答案 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