获取按上次修改排序的目录中的文件?

ste*_*wpf 17 java java-7

在带有新I/O API的Java 7中,是否有一种简单的方法可以按上次修改日期列出目录的内容?基本上我只需要获取最长时间未修改的文件(按上次修改升序排序,取第一个文件名).

Jef*_*rey 21

没有真正的"简单方法",但它有可能:

List<Path> files = new ArrayList<>();
try(DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
    for(Path p : stream) {
        files.add(p);
    }
}

Collections.sort(files, new Comparator<Path>() {
    public int compare(Path o1, Path o2) {
        try {
            return Files.getLastModifiedTime(o1).compareTo(Files.getLastModifiedTime(o2));
        } catch (IOException e) {
            // handle exception
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这将最后修改最快修改文件的文件.DirectoryStreams不遍历子目录.

  • 请注意,lastModifiedTime的精度可能不足以比较文件.例如,当复制一堆文件时,所有目标文件最终将具有相同的lastModifiedTime,因此无法对其进行排序.发生这种情况,因为lastModifiedTime的精度通常仅设置为秒,但不能达到毫秒. (2认同)

ok2*_*k2c 6

杰弗里答案的略微"流"变化,有些人可能会觉得更容易.发布完整性.

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
    StreamSupport.stream(files.spliterator(), false)
        .sorted((o1, o2) -> {
            try {
                return Files.getLastModifiedTime(o1).compareTo(Files.getLastModifiedTime(o2));
            } catch (IOException ex) {
                ...
            }
        })
        .filter(file -> Files.isRegularFile(file))
        .forEach(file -> {
        });
}
Run Code Online (Sandbox Code Playgroud)