Java NullPointerException при вызове listFiles () для каталога - PullRequest
12 голосов
/ 25 мая 2011

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

Почему это могло происходить? Кроме того, почему мои непустые папки возвращают ноль?

1 Ответ

25 голосов
/ 25 мая 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...