Java NIO 一次读取文件夹内容的属性
Java NIO Read Folder's content's attributes at once
我正在使用 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");
}
}
}
感谢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 操作...理论上...
我正在使用 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");
}
}
}
感谢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 操作...理论上...