1

可能重复:
如何在 Java 目录中找到最后修改的文件?

我正在尝试按照创建顺序从目录中检索文件。这已成为使用 Java 的问题。File 类中的 listFiles() 方法不保证返回文件的顺序。有没有其他方法可以按照在目录中创建的顺序来检索文件?

4

5 回答 5

1

您需要使用 a对array of files退回的商品进行排序File.listFiles()ComparatorFile.lastModified

于 2012-11-07T21:21:28.140 回答
1

不,它没有,但是Arrays.sort方法确实需要一个Comparator。我在下面为您定义了一个简单的方法,然后将您自己淘汰:

new Comparator<File>() {
public int compare(File m1, File  m2) {
    return m1.lastModified().compare(m2.lastModified());
}
});

希望这可以帮助...

于 2012-11-07T21:24:24.703 回答
0

创建一个Set<File>未排序的添加所有Files ( unsorted.addAll(dir.listFiles()) 然后,使用自定义比较器比较日期创建一个新的TreeSetusing 。Set<File> sorted=new TreeSet(Comparator<File> byDate)

Comparator<File> byDate=new Comparator<File>() {

    @Override
    public int compare(File o1, File o2) {
        return new Date(o1.lastModified()).compareTo(new Date(o2.lastModified()));
    }
};

并做:

sorted.addAll(unsorted);

新套装将按日期订购。

于 2012-11-07T21:24:14.127 回答
0

正如你已经弄清楚listFiles不保证和订购。如本问题所述,您可以获取其属性以查找创建时间并使用thia之类的东西对其进行排序。

于 2012-11-07T21:29:16.617 回答
0

如果您查看 Java API for File,有一个名为lastModified. 如果您按该属性对文件进行排序,您应该得到您想要的。我很确定在创建文件后无法安排文件,因为每个实现都是特定于操作系统的。

因此,如果您像这样制作比较器:

public class FileComparator implements Comparator<File> {
  public int compare(File x, File y) {
    Long.compare(x.lastModified(), y.lastModified());
  }
}

它可以像这样使用:

File file = new File("...");
List<File> files = Arrays.asList(file.listFiles());
Collections.sort(files, new FileComparator());
于 2012-11-07T21:31:04.563 回答