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

当前回答

在Java 8中:

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

其他回答

你可以试试番石榴。

Function<File, Long> getLastModified = new Function<File, Long>() {
    public Long apply(File file) {
        return file.lastModified();
    }
};

List<File> orderedFiles = Ordering.natural().onResultOf(getLastModified).
                          sortedCopy(files);

你可以使用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 + "");
        }

使用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);
    }
}
public String[] getDirectoryList(String path) {
    String[] dirListing = null;
    File dir = new File(path);
    dirListing = dir.list();

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

让数组名称->文件。


Ascending -> Arrays.sort(files, (o1, o2) -> Long.compare(o1.lastModified(), o2.lastModified()));

Descending -> Arrays.sort(files, (o1, o2) -> Long.compare(o2.lastModified(), o1.lastModified()));