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