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