2012-05-11 73 views
4

我想查找存储在SD卡上的所有文件。我用这个代码:查找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不起作用。

回答

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); 
     } 
    } 
} 
+0

write:java.lang.NullPointerException。尝试找到哪里是空.... – Alex

+0

你将不得不添加一些代码到我的编辑版本在... ...代码来找到根目录:将rootDirs作为一个空列表声明,然后做类似的事情(文件f: root.listFiles()){if(f.isDirectory())rootDirs.add(f); } – Fishbreath

+0

如果我将第一个目录(不是/ sdcard)设置为文件夹“tree”与其他文件夹和文件在其中工作。但如果root是“/ sdcard”,他会发现大约3个文件夹和“内部死亡”。编写NullPointerException。尝试找到问题。稍后再写。谢谢.... – Alex