在SD卡上查找所有文件

4

我想查找存储在SD卡上的所有文件。我使用了以下代码:

List<File> dir = new ArrayList<File>();
List<File> files = new ArrayList<File>();

   File root = new File (Environment.getExternalStorageDirectory().getAbsolutePath());

    scan(root); // find root directories

    for (File f : dir) { // find in root...
       scan(f);
    }

    Log.i("files", "" + files.size());
    Log.i("dir", "" + dir.size());


}

 public void scan (File path) {

    for (File f : path.listFiles()) {
        if (f.isFile()) {
            files.add(f);
        }
        else {
            dir.add(f);
        }
    }
}

但我遇到了这个异常问题:"java.util.ConcurrentModificationException"。我改变了列表(dir)并对其进行了循环。ListIterator也没有帮助。

1个回答

5
你不能在迭代列表时添加元素。尝试使用以下方法:
List<File> dir = new ArrayList<File>();
List<File> files = new ArrayList<File>();

   File root = new File (Environment.getExternalStorageDirectory().getAbsolutePath());

    List<File> rootDirs = //... code to find root directories

    for (File f : rootDirs) { // find in root...
       scan(f);
    }

    Log.i("files", "" + files.size());
    Log.i("dir", "" + dir.size());


}

 public void scan (File path) {

    for (File f : path.listFiles()) {
        if (f.isFile()) {
            files.add(f);
        }
        else {
            dir.add(f);
            scan(f);
        }
    }
}

你需要在我编辑过的版本中添加一些代码来查找根目录:首先声明一个空列表rootDirs,然后执行以下操作:for(File f : root.listFiles()) { if(f.isDirectory()) rootDirs.add(f); } - Fishbreath
如果我设置第一个目录(不是/sdcard)例如文件夹“tree”,其中包含其他文件夹和文件,它可以工作。但是如果根目录是“/sdcard”,他会找到大约3个文件夹和“dead inside”。写NullPointerException。尝试找出问题。稍后再写。谢谢... - Alex
for(File f : root.listFiles()) { if (f.isFile()) { files.add(f); } else { rootDirs.add(f); } }(注:此为代码,无法进行翻译) - Alex
他在文件夹“bugreports”后崩溃了 =) - Alex
在文件夹.android_secure上 -> 崩溃,写NullPointerException,但是如果在“/mnt/sdcard/My Files”上设置根目录,则可以正常工作...无法理解出错原因。 - Alex
2
也许能帮到某些人。如果正在扫描SD卡并尝试查找所有文件,则需要查找文件“.android_secure”并从查找列表中删除。因为当您尝试访问此文件时,应用程序会崩溃!这是一个包含有关您的SD卡数据的文件,如果没有root访问权限,则无法访问。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接