4

如何递归扫描 Android 中的目录并显示文件名?我正在尝试扫描,但速度很慢(强制关闭或等待)。我正在使用这个问题FileWalker的单独答案中给出的类。

4

2 回答 2

19

您应该几乎总是只从非 UI 线程访问文件系统。否则,您可能会长时间阻塞 UI 线程并获得 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());
于 2012-07-14T08:50:52.490 回答
0

System.out.println调用真的很慢(好吧,这并不是函数本身,而是底层的 PrintStream 需要花费大量时间在控制台中写入文本)。

用别的东西代替它们应该没问题。例如,您可以创建并返回包含文件名的数组。

于 2012-07-14T08:40:38.093 回答