【发布时间】:2012-07-14 08:24:27
【问题描述】:
如何递归扫描 Android 中的目录并显示文件名?我正在尝试扫描,但速度很慢(强制关闭或等待)。我正在使用在单独的答案to this question 中给出的FileWalker 类。
【问题讨论】:
标签: java android file-io android-anr-dialog directory-traversal
如何递归扫描 Android 中的目录并显示文件名?我正在尝试扫描,但速度很慢(强制关闭或等待)。我正在使用在单独的答案to this question 中给出的FileWalker 类。
【问题讨论】:
标签: java android file-io android-anr-dialog directory-traversal
您应该几乎总是只从非 UI 线程访问文件系统。否则,您可能会长时间阻塞 UI 线程并获得 ANR。在 AsyncTask 的 doInBackground() 中运行 FileWalker。
这是 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());
【讨论】:
Activity 或Application 的实例作为Context。
System.out.println 调用真的很慢(其实并不是函数本身,而是底层的 PrintStream 需要花费大量时间在控制台中写入文本)。
用其他东西替换它们应该没问题。例如,您可以创建并返回包含文件名的数组。
【讨论】: