Как «пройти» несколько каталогов с несколькими расширениями в java? - PullRequest
0 голосов
/ 17 марта 2020

Вот мой реальный код, который отлично работает:
String sHomeDir - моя единственная папка, с которой начинается сканирование
String sExt - единственное расширение для поиска

try (Stream<Path> walk = Files.walk(Paths.get(sHomeDir)))
{
    List<String> result = walk.map(x -> x.toString())
        .filter(f -> f.endsWith(sExt)).collect(Collectors.toList());
    ...
} catch (IOException e) {
   e.printStackTrace();
}

Это можно переписать, чтобы использовать:
- несколько папок для сканирования (с поддеревом)
- несколько расширений файлов для поиска

1 Ответ

1 голос
/ 17 марта 2020

Для обработки нескольких каталогов вы можете передавать их в потоковом режиме и отображать их в одном потоке путей. Чтобы обработать несколько расширений, вам просто нужно проверить файл по всем им:

public static List<String> multiWalk
    (Collection<String> directories, Collection<String> extensions) {

    return directories.stream()
                      .flatMap(d -> {
                          try {
                              return Files.walk(Paths.get(d));
                          } catch (IOException e) {
                              return Stream.empty();
                          }
                      })
                      .map(Object::toString)
                      .filter(f -> extensions.stream().anyMatch(f::endsWith))
                      .collect(Collectors.toList());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...