回答

13

您几乎总是只能从非UI线程访问文件系统。否则,您可能会长时间阻塞UI线程并获取ANR。在AsyncTaskdoInBackground()中运行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()); 
+0

谢谢!我会试试看! – INCOGNITO 2012-07-14 09:04:39

+0

原谅我的天真的问题,但在这里如何分配上下文?我通常将它作为参数传递给一个函数,但我在这里看不到任何参数?没有,上下文给我一个'无法解决'编译错误。 – biscuitstack 2016-07-11 11:19:14

+1

@biscuitstack你可以使用'Activity'或'Application'的实例作为['Context'](https://developer.android.com/reference/android/content/Context.html)。 – 2016-07-11 13:18:40

0

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

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