Java 如何在Android中递归扫描目录
如何递归扫描Android中的目录并显示文件名?我正在尝试扫描,但速度很慢(强制关闭或等待)。我使用的是另一个答案中给出的Java 如何在Android中递归扫描目录,java,android,file-io,android-anr-dialog,directory-traversal,Java,Android,File Io,Android Anr Dialog,Directory Traversal,如何递归扫描Android中的目录并显示文件名?我正在尝试扫描,但速度很慢(强制关闭或等待)。我使用的是另一个答案中给出的FileWalker类。System.out.println调用非常慢(其实不是函数本身,而是底层的PrintStream,在控制台中编写文本需要很多时间) 用别的东西代替它们,应该没问题。例如,您可以创建并返回一个带有文件名的数组。您几乎应该始终只从非UI线程访问文件系统。否则,您可能会长期阻塞UI线程并获得ANR。在AsyncTask的doInBackground()中运
FileWalker
类。System.out.println
调用非常慢(其实不是函数本身,而是底层的PrintStream,在控制台中编写文本需要很多时间)
用别的东西代替它们,应该没问题。例如,您可以创建并返回一个带有文件名的数组。您几乎应该始终只从非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());
请原谅我的天真问题,这里的上下文是如何分配的?我通常将它作为参数从活动传递到函数,但我在这里看不到参数?如果没有,上下文会给我一个“无法解决”的编译错误。@您可以使用
活动
或应用程序
的实例作为实例。这需要更多的阅读,但您已经给了我一个方向,谢谢Dheeraj。