Como 'caminhada' vários diretórios, com várias extensões de arquivo, em java?

Cruxial:

Aqui está o meu código real, que funciona perfeitamente:
Cordas sHomeDir é a minha única pasta onde para iniciar a digitalização
de Cordas sext é a única extensão de pesquisa para

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();
}

É possível reescrever que, a fim de usar:
- Várias pastas para fazer a varredura (com sub-árvore)
- várias extensões de arquivo para procurar

Obrigado !

Mureinik:

Para lidar com vários diretórios, você pode transmitir-lhes e flatmap-los para um único fluxo de Caminhos. Para lidar com várias extensões, você só precisa verificar o arquivo contra todos eles:

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());
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=296934&siteId=1
Recomendado
Clasificación