Как я могу рекурсивно сканировать каталоги в Android и отображать имена файлов? Я пытаюсь сканировать, но это происходит медленно (принудительно закройте или подождите). Я использую класс FileWalker
, указанный в отдельном ответе на этот вопрос.
Как рекурсивно сканировать каталоги в Android
Ответы (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
Простите мой наивный вопрос, но как здесь присваивается контекст? Обычно я передаю его из действия в качестве аргумента в функцию, но я не вижу здесь аргументов? Без этого контекст дает мне ошибку компиляции «не удается разрешить».
- person biscuitstack; 11.07.2016
@biscuitstack Вы можете использовать экземпляр
Activity
или Application
в качестве Context
.
- person Dheeraj Vepakomma; 11.07.2016
Это потребует дополнительного чтения, но вы дали мне направление, спасибо Дирадж.
- person biscuitstack; 11.07.2016
Вызовы System.out.println
очень медленные (на самом деле это не сама функция, а лежащий в ее основе PrintStream, которому требуется много времени для записи текста в консоли).
Замените их чем-то другим и все будет в порядке. Например, вы можете создать и вернуть массив с именами файлов.
person
Dalmas
schedule
14.07.2012