2012-05-11 179 views
0

我想從SD卡獲取所有路徑文件(及其大小!!)。從SD卡獲取所有文件

我更改代碼:

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

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

     scan(root); 

     for (File f : dir) { 
      scan(f); 
     } 

public void scan (File path) { 

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

但有一個問題。我循環「目錄」並同時改變他。我有例外 「java.util.ConcurrentModificationException」

+0

您對此問題所做的修改使以前的所有答案都無關緊要。請考慮在將來發佈一個單獨的問題,而不是完全改變現有問題。 – eldarerathis

回答

1

files[i + j] = files[i];線將造成problem.use這樣

for (int i = 0, j = 1; i < files.length; i++) { 
     if (files[i].isFile()) 
      Log.i("file:" + files[i].getName(), " " + files[i].getAbsolutePath()); 
     else { 
      /* if current file is derictory -> 
      save him in end of array with directoty paths*/ 
      int testsum=i+j; 
      if(testsum<=files.length) 
      { 
       files[i + j] = files[i]; 
       Log.i("dir:" + files[i].getName(), " " + files[i].getAbsolutePath()); 
      } 
      else 
       { 
       } 
     } 
    } 
+0

這將防止發生異常,但仍會重複打印遇到的第一個目錄。 – eldarerathis

+0

好的。你有想法如何掃描所有目錄? – Alex

+0

不,我不知道它,但我想先從SD卡掃描所有文件夾名稱然後。掃描每個文件夾的files.here我只是回答你的ArrayIndexOutOfBoundsException作爲你的問題 –

0

的問題在這條線

files[i + j] = files[i]; 

當i = files.length - 1.這是奇怪的代碼行。