0

apache.commons jar を使用して、フォルダーから最新の 10 個のファイル (作成日まで) のみを読み取っています。

これはすべてのファイルをリストしていますが、10ファイルの読み取りが完了してもこれが停止しない理由がわかりません

これは私のコードですが、停止しない理由がわかりません

import org.apache.commons.io.comparator.LastModifiedFileComparator;
import java.io.File;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        File dir = new File("D:\\MyFolder");
        File[] files = dir.listFiles();

        Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
        for (int i = 0; i < files.length; i++) {

             if(files.length==10)
             {
             // return;
                 break ; 
             }

            File file = files[i];
            System.out.printf(file.getName()+"\n");


        }


    }
}
4

3 に答える 3

3

変化する

if(files.length==10)

if(i == 10)

ファイル配列の長さと常に比較しています。

于 2012-04-20T14:58:07.243 に答える
3

間違った状態

for (int i = 0; i < files.length; i++) {

        File file = files[i];
        System.out.printf(file.getName()+"\n");
    }

する必要があります

for (int i = 0; i < files.length && i < 10; i++) {

        File file = files[i];
        System.out.printf(file.getName()+"\n");
}
于 2012-04-20T14:58:13.797 に答える
1

はループの反復ごとに変化しないif (i == 10)ため、条件は である必要があります。files.lengthさらに良いことに、コードを次のように変更します。

int end = Math.min(files.length, 10);
for (int i = 0; i < end ; i++) {
    // ... your code
}

これにより、終了インデックスが 1 回計算され、ループ内での再計算が回避されます。

于 2012-04-20T14:58:06.933 に答える