2012-05-11 13 views
4

sdCardに保存されているすべてのファイルを検索したい。私はこのコードを使用: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

書き込み:java.lang.NullPointerException。どこにnullがあるか調べてみてください.... – Alex

+0

編集したバージョンの//コードにルートディレクトリを見つけるためにいくつかのコードを追加する必要があります:rootDirsを空のリストとして宣言し、 root.listFiles()){if(f.isDirectory())rootDirs.add(f); } – Fishbreath

+0

私は最初のディレクトリ(/ sdcardではない)を "tree"というフォルダに設定していれば、その中の他のフォルダやファイルと一緒に作業します。しかし、ルートが "/ sdcard"の場合、約3つのフォルダと "死んだ内部"が見つかります。 NullPointerExceptionを書き込みます。問題を見つけることを試みなさい。後で書いてください。ありがとう.... – Alex

関連する問題