0

我正在使用 Java 和包 NIO 编写备份程序。

据我发现,我可以按照下面的代码示例进行操作,即读取文件夹内容列表,然后对于每个文件我必须执行文件属性请求......这不是一种有效的方法,特别是如果有人有大一个文件夹中有数千个文件的文件夹,所以也许有另一种方法可以通过读取文件夹的所有属性来做到这一点?

或者也许我应该在这种情况下使用其他东西而不是 NIO?非常感谢你

public void scan(Path folder) throws IOException {
    try (DirectoryStream<Path> ds = Files.newDirectoryStream(folder)) {
        for (Path path : ds) {
            //Map<String, Object> attributes = Files.readAttributes(path, "size,lastModifiedTime");
        }
    }
}
4

1 回答 1

0

感谢 DuncG,答案很简单:

HashMap <Path, BasicFileAttributes> attrs = new HashMap<>();
BiPredicate<Path, BasicFileAttributes> predicate = (p, a) -> {
    return attrs.put(p, a) == null;
};
Stream<Path> stream = Files.find(folder, Integer.MAX_VALUE, predicate);

我做了一个基准来比较,这个例子的执行速度比问题文本中的例子快 3 倍,所以它似乎调用了更少的文件系统 I/O 操作......理论上......

于 2021-07-15T15:04:46.213 回答