2

作成日に基づいて最新の10個のファイルを読み込もうとしています。

このコードを試してみましたが、機能していません。つまり、新しいファイルを追加しても、出力に新しいファイル名が表示されません。

import java.io.File;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        File inboxDir = new File("D:\\SPOTO");
        File[] files = inboxDir.listFiles();
        Arrays.sort( files, new Comparator()
        {
        public int compare(Object o1, Object o2) {
        return new Long(((File)o1).lastModified()).compareTo(new Long(((File) o2).lastModified()));
        }

        });


        for(int i=0;i<10;i++)
        {
            System.out.println(files[i].getName());
        }


    }
}

apache commons ioを試してみましたが、それも機能していません(そのディレクトリに新しいファイルが作成されたときに、新しいファイルが表示されないことを意味します)

これは私のApachecommonsioバージョンです

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("c:\\");
        File[] files = dir.listFiles();

        Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            System.out.printf("File %s - %2$tm %2$te,%2$tY%n= ", file.getName(),
                    file.lastModified());
        }

        Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            System.out.printf("File %s - %2$tm %2$te,%2$tY%n= ", file.getName(),
                    file.lastModified());
        }
    }
}
4

2 に答える 2

3

比較順序を反転してみてください。

return new Long(((File)o2).lastModified()).compareTo(new Long(((File) o1).lastModified()));

これは、今ローカルでテストしている私にとってはうまくいきます。

于 2012-04-20T16:30:04.450 に答える
2

少なくとも通常の Java バージョンでは、ファイルを間違った (昇順で) 比較します。結果に -1 を掛けると、最新のファイルが最初に表示されます。

return -1* (new Long(((File)o1).lastModified()).compareTo(new Long(((File) o2).lastModified())));

タイムスタンプでは、大きい方が新しいファイルに対応します。

于 2012-04-20T16:29:59.067 に答える