如何使用Files.getAttribute过滤Java流



我正在尝试筛选创建得比其他文件更新的文件。我只是不知道如何将Files中的方法直接应用到流中。

有更整洁的方法吗?,我知道在应用程序中使用Streams对可读性没有帮助,但我正在努力学习使用它

try (Stream<Path> stream = Files.walk(dir,1)) {
res = stream.filter(Files::isDirectory).filter(
f->Files.getAttribute(f,"creationTime")>
Files.getAttribute(reference, "creationTime"))
.collect(Collectors.toList());
}

您无法比较;creationTime"/CCD_ 2>";。若您查看Files.isDirectory(path)Files.getAttribute(path,attr)的源代码,您将看到它们都读取底层文件系统属性,所以两个过滤器正在重新读取类似的定义。

切换到Files.find提供了一种更简洁的扫描方式,因为它自动检索文件属性,并将文件系统路径和属性传递给双谓词。这使得先在目录上预过滤Files.find流,然后使用内置time1.isAfter(time2)比较创建时间变得更容易。类似这样的东西:

Instant refTime = Files.readAttributes(reference, BasicFileAttributes.class).creationTime().toInstant();
try(var dirs = Files.find(dir, 1 /*depth*/, (p,a) -> 
a.isDirectory() && a.creationTime().toInstant().isAfter(refTime))) {
List<Path> recentDirs = dirs.collect(Collectors.toList());
...
}

最新更新