2012-05-11 1 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를 빈 목록으로 선언 한 다음 (File f : root.listFiles()) {if (f.isDirectory()) rootDirs.add (f); } – Fishbreath

+0

다른 폴더와 그 안에있는 파일들과 함께 폴더 "tree"와 같은 첫 번째 디렉토리 (/ sdcard가 아님)를 설정하면 어떻게됩니까? 그러나 루트가 "/ sdcard"이면 그는 약 3 개의 폴더와 "dead inside"를 찾습니다. NullPointerException를 작성합니다. 문제를 찾아보십시오. 나중에 씁니다. 감사합니다 .... – Alex