0

我想从 sdcard 获取所有路径文件(及其大小!!)。

我更改代码:

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

但是一个问题。我循环“dir”并同时更改他。我有异常“java.util.ConcurrentModificationException”

4

2 回答 2

1

files[i + j] = files[i];条线会引起问题。使用这种方式

 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
              {
              }
        }
    }
于 2012-05-11T17:37:17.643 回答
0

这一行的问题

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

当 i = files.length - 1. 这是奇怪的代码行。

于 2012-05-11T17:39:07.323 回答