File.listFiles выдает NullPointer - PullRequest
0 голосов
/ 27 апреля 2018

Я рекурсивно ищу файл на моем компьютере.

 private static File findFileDepthSearch(File dir, String fileName) {
    File[] files = dir.listFiles();
    for (File f : files) {
        if (f.getName().equalsIgnoreCase(fileName)) {
            return f;
        }
    }
    for (File f : files) {
        if (f.isDirectory()) {
            File res = findFileDepthSearch(f, fileName);
            if(res != null)
            {
                return res;
            }
        }
    }
    return null;
}

После двух уровней глубины, dir.listFiles возвращает null. Однако это не должно иметь место, потому что рассматриваемый файл фактически является каталогом. Когда я пытаюсь ввести его в консоль, он говорит: Доступ запрещен , но в соответствии с проблемами безопасности javadocs следует выдать исключение. Что мне здесь не хватает? Добавление этого в

if(files==null)
    {
        return null;
    }

исправляет проблему, но зачем это нужно?

1 Ответ

0 голосов
/ 27 апреля 2018

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

Если у вас нет доступа к каталогу на уровне файловой системы, это квалифицируется как «ошибка ввода-вывода», и поэтому функция вернет null.

Выдает SecurityException, только если вы создаете SecurityManager и настраиваете его для ограничения доступа к этому каталогу.

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