Получение основной ошибки, когда File.listFiles возвращает значение null

В соответствии с File.listFiles javadoc метод

Возвращает значение null, если это абстрактное имя пути не обозначает каталог или возникает ошибка ввода-вывода.

Я знаю, что я использую каталог, но получил результат null, поэтому ошибка ввода-вывода должна появиться. Меня очень интересует ошибка.

Как я могу получить сообщение об ошибке/код, когда возвращается такой результат null?

Ответы

Ответ 1

Используйте java.nio.file.DirectoryStream (в Java 7+), и вы получите правильные исключения.

Ответ 2

Вы не можете. К сожалению, API не предоставляет вам способ узнать о базовой ошибке ввода-вывода.

См. также

  • Ошибка 4505804: File.listFiles() требует null проверить возвращаемое значение - должна иметь лучшую обработку ошибок

    Различные методы listFiles File все имеют следующую раздражающую функцию: они могут возвращать null, если возникает ошибка ввода-вывода.

    Такое поведение очень неудобно, потому что это означает, что не только должен ли я иметь код, который обрабатывает IOException (это нормально), но я также должен выполните дополнительные null проверки результата.

    Лучшее поведение будет заключаться в том, что если возникает ошибка ввода-вывода, то IOException всегда бросается. Вы не должны использовать выдающееся возвращаемое значение иногда указывают ошибки, а затем и другие времена throw Exception s!

    Оценка. Мы планируем рассмотреть эту давнюю проблему в предстоящем API новой файловой системы.

Ответ 3

Из того, что я вижу из реализации файла, он вернет null, если

  • файл не является каталогом или
  • файл не существует или
  • каталог защищен от чтения.

Нет никаких признаков скрытого IOException, хотя ошибка ввода-вывода может произойти в собственном коде.

Ответ 4

установите perm для папки 311 (или что-то без чтения) и listFiles() вернет null