【问题标题】:How to recursively scan directories in Android如何递归扫描Android中的目录
【发布时间】:2012-07-14 08:24:27
【问题描述】:

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

【问题讨论】:

    标签: java android file-io android-anr-dialog directory-traversal


    【解决方案1】:

    您应该几乎总是只从非 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());
    

    【讨论】:

    • 请原谅我的幼稚问题,但这里的上下文是如何分配的?我通常将它从活动作为参数传递给函数,但我在这里看不到参数?如果没有,上下文会给我一个“无法解决”的编译错误。
    • @biscuitstack 您可以使用ActivityApplication 的实例作为Context
    • 这需要更多阅读,但你给了我一个方向,谢谢 Dheeraj。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 2013-06-25
      • 2011-09-30
      • 2014-10-13
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多