我想获得目录中的文件列表,但我想对其进行排序,以便最早的文件排在前面。我的解决方案是调用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());
    } });

当前回答

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

其中listFiles是数组列表中所有文件的集合

其他回答

你可以使用Apache的LastModifiedFileComparator库

 import org.apache.commons.io.comparator.LastModifiedFileComparator;  


File[] files = directory.listFiles();
        Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
        for (File file : files) {
            Date lastMod = new Date(file.lastModified());
            System.out.println("File: " + file.getName() + ", Date: " + lastMod + "");
        }

我认为你的解决办法是唯一明智的办法。获取文件列表的唯一方法是使用File.listFiles(),文档声明这不能保证返回的文件的顺序。因此,您需要编写一个使用File.lastModified()的比较器,并将其与文件数组一起传递给Arrays.sort()。

你也可以看看apache commons IO,它有一个内置的最后修改比较器和许多其他很好的工具来处理文件。

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

val filesList = directory.listFiles()

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

在Java 8中:

数组。sort(files, (a, b) -> Long.compare(a. lastmodified (), b. lastmodified ()));