Объяснение
Может показаться немного неинтуитивным , но на самом деле именно так класс должен работать согласно его документации .Он называется пустой абстрактный путь в документации:
Пустой абстрактный путь не имеет префикса и пустая последовательность имен .
А из вашего конструктора File#File(String)
:
Создает новый экземпляр файла путем преобразования заданной строки пути в абстрактный путь.Если данная строка является пустой строкой, то результатом является пустой абстрактный путь .
Так что класс File
фактически интерпретирует пустое имя как настоящее имя.Когда вы тестируете File#isDirectory()
или File#isFile()
, он, таким образом, проверяет, существует ли файл или каталог, например
D:\Java Workspace\iTAW_Workspace\JavaTest\<empty>
. Обратите внимание на <empty>
, который я написал, чтобы указать, что он на самом деле ищет файл здесь с пустое имя .Очевидно, что такой файл не может существовать, поэтому результат всегда будет false
.Итак, еще раз, он не проверяет
D:\Java Workspace\iTAW_Workspace\JavaTest\
, а вместо этого пустой файл в этом каталоге, который не существует.
К сожалению, вы не видите этого, когдаиспользуя метод File#toAbsolutePath()
, поскольку нет представления для пустого имени .
NIO
Обратите внимание, что класс File
и все, что с ним связано устарел .В настоящее время файловый ввод-вывод выполняется с использованием NIO, вращающегося вокруг Files
, Paths
и Path
.Этот API намного понятнее и понятнее.Он также будет работать так, как задумано в вашем текущем примере:
Files.isDirectory(Paths.get("")); // true
Подробнее смотрите в документации 1065 *.