Java NullPointerException при вызове listFiles() в каталоге

У меня есть серия папок, содержащих книги на сервере, к которым я обращаюсь с этим фрагментом кода. Я хочу сделать каждую из этих папок объектом, чтобы впоследствии я мог работать с файлами внутри них. Я пытаюсь использовать этот метод, чтобы вернуть список папок в качестве объектов книги.

public List<Book> getBooks(File folder){
    List<Book> books = new ArrayList<Book>();
    for (File f : folder.listFiles()){
        if (f.isDirectory()){
            System.out.println(f.getAbsolutePath() + "" + f.listFiles());
            books.add(new Book(f));
        }
    }
    return books;
}

Оператор println в этом блоке печатает, как и должно, прямой путь к папке, а затем адрес памяти вместе с некоторой другой информацией. Тем не менее, где-то в папке он выдает null, когда вызывается listFiles(). Папка, в которой он выполняется, не пуста. Эта, предположительно, пустая папка затем передается моему методу init класса.

public Book(File bookFolder) {
    this.bookFolder = bookFolder;
    this.bookPath = bookFolder.getAbsolutePath();

    System.out.println(bookFolder + " " + bookFolder.listFiles());

    for (File f : bookFolder.listFiles()) {
        ...
    }
}

Оператор println в этом блоке выдает точный путь к папке, а затем другой адрес памяти, который также ожидается. Когда он попадает в "пустую" папку, он снова печатает нуль для адреса памяти.

Теперь, для реальной проблемы, строка с циклом for - это то, где программа вылетает и выдает исключение NullPointerException, которое даже не описано в документации для метода listFiles.

Почему это может произойти? Кроме того, почему мои непустые папки возвращают null?

Ответ 1

В документации для метода listFiles() четко указано, что он "возвращает null, если этот абстрактный путь не обозначает каталог, или если Ошибка ввода-вывода."

Одна из наиболее распространенных причин, по которым каталог не может быть указан, заключается в том, что в процессе отсутствуют правильные разрешения. Вы используете это как самостоятельно или в каком-то сервисе, который работает как другой пользователь?

Кстати, API File - отличный пример того, насколько плохая жизнь может быть без исключений.