0

我正在尝试编写一种方法,该方法从给定目录中提取每个文件(也在每个子目录中)。我正在为此使用 Files.find。问题是,每当它找到我无法访问的文件时,它就会停止,但我想继续研究并将其他文件添加到列表中。这是我的代码

public static List<String> search(String dir){
        List<String> listFiles = new ArrayList<>();
        try{
            Files.find(Paths.get(dir), Integer.MAX_VALUE, (filePath, fileAttr) -> fileAttr.isRegularFile())
                    .forEach((file) -> {
                        listFiles.add(file.toAbsolutePath().toString());
                    });
        } catch (UncheckedIOException ue){
            System.out.println("Can't access that directory");
        } catch (IOException e) {
            e.printStackTrace();
        }

        return listFiles;
    }

我怎样才能改变它?

4

1 回答 1

0

您正在从 Java 8 的 NIO 包中寻找FileVisitor接口。此类提供了多种功能来在进入目录之前测试目录的可访问性等,以及内置的错误处理和用于控制应用程序行为的 API。

您的具体问题需要创建某种列表(例如,在 之外FileVisitor),然后您可以从方法内部使用Collection::add

可悲的是,Java 的 Stream API 完全无法自行处理异常,因此Stream考虑到 NIO 提供了更冗长但更优越的解决方案,任何尝试用 s 解决您的问题都需要大量不必要的工作FileVisitor

于 2020-02-21T15:07:05.843 回答