这是我的实际代码,可以正常工作: 字符串sHomeDir是我唯一要开始扫描的文件夹 字符串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();
}
是否可以重写该代码以便使用: -多个文件夹进行扫描(带有子树) -多个文件扩展名进行搜索
问题来源:Stack Overflow
要处理多个目录,您可以流式传输它们并将它们平面映射到单个Paths流。要处理多个扩展名,您只需要对照所有扩展名检查文件:
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());
}
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。