如何在JavaFX中使用DirectoryChooser从目录中获取所有图像文件的列表?

时间:2017-11-25 03:58:11

标签: javafx

我需要从特定目录获取所有图像文件,并在此目录的所有递归子目录中获取所有图像。

1 个答案:

答案 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