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

Другие вопросы по тегам