Ответ 1
Используйте java.nio.file.DirectoryStream
(в Java 7+), и вы получите правильные исключения.
В соответствии с File.listFiles javadoc метод
Возвращает значение null, если это абстрактное имя пути не обозначает каталог или возникает ошибка ввода-вывода.
Я знаю, что я использую каталог, но получил результат null
, поэтому ошибка ввода-вывода должна появиться. Меня очень интересует ошибка.
Как я могу получить сообщение об ошибке/код, когда возвращается такой результат null
?
Используйте java.nio.file.DirectoryStream
(в Java 7+), и вы получите правильные исключения.
Вы не можете. К сожалению, API не предоставляет вам способ узнать о базовой ошибке ввода-вывода.
File.listFiles()
требует null
проверить возвращаемое значение - должна иметь лучшую обработку ошибок
Различные методы
listFiles
File
все имеют следующую раздражающую функцию: они могут возвращатьnull
, если возникает ошибка ввода-вывода.Такое поведение очень неудобно, потому что это означает, что не только должен ли я иметь код, который обрабатывает
IOException
(это нормально), но я также должен выполните дополнительныеnull
проверки результата.Лучшее поведение будет заключаться в том, что если возникает ошибка ввода-вывода, то
IOException
всегда бросается. Вы не должны использовать выдающееся возвращаемое значение иногда указывают ошибки, а затем и другие временаthrow Exception
s!Оценка. Мы планируем рассмотреть эту давнюю проблему в предстоящем API новой файловой системы.
Из того, что я вижу из реализации файла, он вернет null
, если
Нет никаких признаков скрытого IOException, хотя ошибка ввода-вывода может произойти в собственном коде.
установите perm для папки 311 (или что-то без чтения) и listFiles() вернет null