Задать вопрос
@rsdev

Как найти все файлы заданного формата на реальном устройстве?

Собственно вопрос в названии. Хочу найти все пути к JPG файлам на устройстве. Код тестирую на 4х устройствах, на 2х получаю ошибку, на 1 все работает как часы, на 4м ошибка перманентная.

Ищу файлы следующим образом:

public void findFile(File dir) throws IOException {

        if (dir.isDirectory()) {
            File[] files = dir.listFiles();
            for (File file : files) {
                NumberFor++;
                try {
                    if (file.isDirectory()) {
                        findFile(file);
                    }
                }
                catch (Exception e){
                    Toast.makeText(this,String.valueOf(e.getMessage()),Toast.LENGTH_SHORT).show();
                }

            }
            for (File file : files) {
                if (file.isFile()) {   //проверяем, файл ли это
                    String fileName = file.getName();
                    String ext = fileName.substring(fileName.lastIndexOf('.') + 1,
                            fileName.length());
                    if (ext.equalsIgnoreCase("JPG")) {
                        fileList.add(file.getAbsolutePath());
                    }
                }
            }
        }
    }


Ищу все файлы по адресу "/"
В логах ругается на nullpointerexception в методе isDirectory(). При ручном дебаге проходит более 100 циклов (дальше не мерил), похоже находит папку, которую не может прочитать.

Как побороть, подскажите.
  • Вопрос задан
  • 203 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
TwerTrue
@TwerTrue
Молодой и неопытный разработчик
Код в блок возьми, а то в одну линию не очень
Ответ написан
gadfi
@gadfi
https://gamega.org
if(file!=null&&file.isDirectory()){....
Ответ написан
sivabur
@sivabur
Заблокировали просто так!
в строке File[] files = dir.listFiles();
files может принять значение null (если доступ к папке запрещен) и далее программа генерирует ошибку, поэтому после указанной строки необходимо, судя по всему, вставить проверку на null: что то вроде этого: if (files == null){
files = new File[]{};
}

Зависит еще от прав. Если с под рута запуск делается по идеи не должно быть ошибок.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы