我想获得目录中的文件列表,但我想对其进行排序,以便最早的文件排在前面。我的解决方案是调用File。listFiles,然后根据File返回列表。lastModified,但我想知道是否有更好的方法。

编辑:我目前的解决方案,建议是使用匿名比较器:

File[] files = directory.listFiles();

Arrays.sort(files, new Comparator<File>(){
    public int compare(File f1, File f2)
    {
        return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
    } });

当前回答

类似的方法是什么,但没有对Long对象进行装箱:

File[] files = directory.listFiles();

Arrays.sort(files, new Comparator<File>() {
    public int compare(File f1, File f2) {
        return Long.compare(f1.lastModified(), f2.lastModified());
    }
});

其他回答

自Java 8以来的优雅解决方案:

File[] files = directory.listFiles();
Arrays.sort(files, Comparator.comparingLong(File::lastModified));

或者,如果你想让它降序排列,就把它倒过来:

File[] files = directory.listFiles();
Arrays.sort(files, Comparator.comparingLong(File::lastModified).reversed());

使用Java 8+ 这里文件按修改日期降序排序(更新的文件第一次打印)

public void deleteOldFiles(String directory) {
    try {
        File file = new File(directory);
        Arrays.stream(file.listFiles()).filter(File::isFile)
                .sorted((file1, file2) -> {
                    if(file1.lastModified()>file2.lastModified()){
                        return -1;
                    }else if(file1.lastModified()<file2.lastModified()){
                        return 1;
                    }else {
                        return 0;
                    }
                }).forEach(System.out::println);

    } catch (Exception e) {
        System.out.println("No such directory exists: " + directory);
    }
}

这里是Kotlin的方法,如果有人正在寻找它:

val filesList = directory.listFiles()

filesList?.let{ list ->
    Arrays.sort(list) { 
        f1, f2 -> f2.lastModified().compareTo(f1.lastModified()) 
    }
}

在java 6中,最好的方法是:

  File[] listaArchivos = folder.listFiles();
            Arrays.sort(listaArchivos, new Comparator<File>() {
                @Override
                public int compare(File f1, File f2) {
                    return (f1.lastModified() < f2.lastModified()) ? -1 : ((f1.lastModified() == f2.lastModified()) ? 0 : 1);
                }
            }); 
public String[] getDirectoryList(String path) {
    String[] dirListing = null;
    File dir = new File(path);
    dirListing = dir.list();

    Arrays.sort(dirListing, 0, dirListing.length);
    return dirListing;
}