0

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

しかし、問題が 1 つあります。「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];

when i = files.length - 1. これは奇妙なコード行です。

于 2012-05-11T17:39:07.323 に答える