Как рекурсивно сканировать каталоги в Android

Как я могу рекурсивно сканировать каталоги в Android и отображать имена файлов? Я пытаюсь сканировать, но это происходит медленно (принудительно закройте или подождите). Я использую класс FileWalker, указанный в отдельном ответе на этот вопрос.


person INCOGNITO    schedule 14.07.2012    source источник


Ответы (2)


Вы почти всегда должны обращаться к файловой системе только из потока, отличного от пользовательского интерфейса. В противном случае вы рискуете заблокировать поток пользовательского интерфейса на длительное время и получить ANR. Запустите FileWalker в AsyncTask doInBackground().

Это немного оптимизированная версия FileWalker:

public class Filewalker {

    public void walk(File root) {

        File[] list = root.listFiles();

        for (File f : list) {
            if (f.isDirectory()) {
                Log.d("", "Dir: " + f.getAbsoluteFile());
                walk(f);
            }
            else {
                Log.d("", "File: " + f.getAbsoluteFile());
            }
        }
    }   
}

Вы можете вызвать его из фонового потока следующим образом:

Filewalker fw = new Filewalker();
fw.walk(context.getFilesDir());
person Dheeraj Vepakomma    schedule 14.07.2012
comment
Простите мой наивный вопрос, но как здесь присваивается контекст? Обычно я передаю его из действия в качестве аргумента в функцию, но я не вижу здесь аргументов? Без этого контекст дает мне ошибку компиляции «не удается разрешить». - person biscuitstack; 11.07.2016
comment
@biscuitstack Вы можете использовать экземпляр Activity или Application в качестве Context. - person Dheeraj Vepakomma; 11.07.2016
comment
Это потребует дополнительного чтения, но вы дали мне направление, спасибо Дирадж. - person biscuitstack; 11.07.2016

Вызовы System.out.println очень медленные (на самом деле это не сама функция, а лежащий в ее основе PrintStream, которому требуется много времени для записи текста в консоли).

Замените их чем-то другим и все будет в порядке. Например, вы можете создать и вернуть массив с именами файлов.

person Dalmas    schedule 14.07.2012