我需要从特定目录获取所有图像文件,并在此目录的所有递归子目录中获取所有图像。
答案 0 :(得分:0)
您可以使用Files
API获取图片文件:
Pattern imageMIMEPattern = Pattern.compile("image/.*");
button.setOnAction(evt -> {
DirectoryChooser chooser = new DirectoryChooser();
File f = chooser.showDialog(primaryStage);
if (f != null) {
Path p = f.toPath();
try {
// find all files with mime type image/... in subdirectories up to a depth of 10
Files.find(p, 10, (path, attributes) -> {
String contentType;
try {
contentType = Files.probeContentType(path);
} catch (IOException ex) {
return false;
}
return contentType != null && imageMIMEPattern.matcher(contentType).matches();
}).forEach(System.out::println);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
});
当然,您需要替换.forEach(System.out::println)
以获得所需效果Stream<Path>
(例如,回到File
/收集到List
,等等。“ / p>
您可能还想使用其他BiPredicate<Path, BasicFileAttributes>
来确定所需的文件。此外,您可能希望搜索大于10的深度。
如果您想关注链接,则需要将FileVisitOption.FOLLOW_LINKS
作为附加参数添加到Files.find
method。