1

フォルダーが空かどうかを確認する方法を知っている問題が1つありますが、ループでフォルダーが空かどうかを確認すると常にエラーが発生します。これは、機能しないコードの例です。

String sdcard = Environment.getExternalStorageDirectory().toString();
        File file = new File(sdcard);
        File subFiles[] = file.listFiles();
        for(int i=0; i<subFiles.length; i++) {
            File subFile = new File(sdcard +"/"+ subFiles[i].getName());
            if(subFile.isDirectory() && subFile.listFiles().length==0) {

            }
        }

私の状態では常​​にエラーが発生します。

4

2 に答える 2

5

これはコードのより良いバージョンです。これは再帰的なものでもあり、ストレージ上のすべての空のフォルダーを検索することを意味します。実際には、ここで null チェックを行うのは適切ではありません。ドキュメントには、がディレクトリでないnull場合にのみ返されることが示されているためです。file

public static void traverseEmptyFolders(File root) {
        if (root.isFile()) {
            throw new IllegalArgumentException("Argument should be a directory.");
        }
        for (File file : root.listFiles()) {
            if (file.isDirectory()) {
                File[] contents = file.listFiles(); 
                if (contents == null || contents.length == 0) {
                    // do something for an empty folder
                } else {
                    traverseEmptyFolders(file);
                }
            }
        }
    }

    public static void someOtherMethod() {
        traverseEmptyFolders(Environment.getExternalStorageDirectory());
    }

これがうまくいくかどうか教えてください。

于 2012-10-25T15:06:58.147 に答える
0
String sdcard = Environment.getExternalStorageDirectory().toString();
    File file = new File(sdcard);
    File subFiles[] = file.listFiles();
    for(int i=0; i<subFiles.length; i++) {
        File subFile = new File(sdcard +"/"+ subFiles[i].getName());

ファイル temp[] = subFiles.length;

        if(subFile.isDirectory() && (temp != null && temp.length == 0)) {

        }
    }
于 2012-10-25T15:01:32.927 に答える