Недоступные файлы и File.list () - PullRequest
3 голосов
/ 27 февраля 2011

при поиске файла в моей файловой системе моя программа вызвала исключение нулевого указателя, поскольку File.list () не смог получить доступ к «Documents And Settings» в моей файловой системе и попытался проанализировать String [] myArray = File.list() когда myArray был равен NULL, возникла исключительная ситуация.

как я могу проверить, нельзя ли получить доступ к файлу или папке с помощью File, и не допустить этого?

Ответы [ 3 ]

7 голосов
/ 27 февраля 2011

file.isDirectory() сообщит вам, если объект File представляет каталог.

В документации listFiles() упоминается, что она вернет null в случае, если File не представляет каталог. Кроме того, вам нужно проверить с помощью file.canRead(), может ли приложение читать каталог.

Но API File здесь действительно плох, потому что он может вернуть null, если возникнет проблема ввода-вывода. Так что, где вы обычно ловите IOException, здесь вы должны проверить на null. Например, Apache commons-io FileUtils использует именно такой подход:

File[] found = directory.listFiles(filter);
if (found != null) {...}
3 голосов
/ 27 февраля 2011

Только не делай этого.ИМХО, единственный вменяемый способ это что-то вроде

String[] files = file.list();
if (files!=null) {
    for (String f : files) processFile(f);
}

Он работает всегда и избегает дополнительных системных вызовов.Любой другой подход занимает больше времени и может потерпеть неудачу, когда, например, разрешения меняются между ними.Для file!=null выражение file.listFiles() гарантированно никогда не завершится.

0 голосов
/ 27 февраля 2011

Вы можете использовать метод canRead(), чтобы узнать, можно ли прочитать папку.

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