Атрибуты содержимого папки чтения Java NIO сразу
Я пишу программу резервного копирования с использованием 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");
}
}
}
1 ответ
Благодаря 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 раза быстрее, чем пример из текста вопроса, поэтому кажется, что он вызывает меньше операций ввода-вывода файловой системы... теоретически...