Как уже упоминалось, разница в поведении связана с исправлением ошибки: JDK-8215467 . Описание ошибки объясняет, что до исправления результат Files#isHidden(Path)
был несовместим с другим программным обеспечением ядра в Windows (например, File Explorer , PowerShell , CMD и т. Д.). Несоответствие состояло в том, что каталоги в Windows, безусловно, могут быть скрыты, но Java (или, по крайней мере, NIO2) считала иначе.
В комментариях к проблеме было указано, что результат также не соответствует java.io.File#isHidden()
. На самом деле, если вы используете:
File file = new File("C:\\");
System.out.println(file.isHidden());
Вы увидите распечатанный true
, даже в Java 12 и более ранних версиях (по крайней мере, у меня на моем компьютере с Windows 10 Home).
Факт C:\
сообщается как скрытый, кажется правильным для меня. Если я проверяю атрибуты C:\
в PowerShell , он показывает каталог как скрытый.
PS C:\> $root = Get-Item "C:\"
PS C:\> $root.Attributes
Hidden, System, Directory