У меня есть серия папок, содержащих книги на сервере, к которым я обращаюсь с этим фрагментом кода. Я хочу сделать каждую из этих папок объектом, чтобы впоследствии я мог работать с файлами внутри них. Я пытаюсь использовать этот метод, чтобы вернуть список папок в качестве объектов книги.
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?