0

说我有这样的事情

Stream<Path> files = Files.walk(Paths.get(somePath))

然后我流过并收集

但是后来我想将其转换为使用 SimpleFileVisitor,因为它是必需的,我该怎么办?我已经用谷歌搜索并尝试了几个小时而没有得到任何结果。您甚至可以将 Stream 与 SimpleFileVisitor 一起使用吗?还是我需要重新做一遍这个方法?据我了解,我需要几种方法来使用 SimpleFileVisitor,我对此感到困惑。Files.walk 非常简单,但它不符合我的意图。

4

1 回答 1

2

SimpleFileVisitor 方法:

为了使用 SimpleFileVisitor,您可以通过walkFileTree以下方式使用:

try {
      Files.walkFileTree(Paths.get("somePath"), new SimpleFileVisitor<Path>() {
          @Override
          public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
              System.out.println("visitFile: " + file);
              return FileVisitResult.CONTINUE;
          }

          @Override
          public FileVisitResult visitFileFailed(Path file, IOException ex) throws IOException {
              System.out.println("visitFileFailed: " + file + " because of " + ex);
              return FileVisitResult.CONTINUE;
          }
          // etc... you can add postVisit...
      });
} catch (IOException e) {
      ...
}

这使您可以在访问每个文件时执行操作,但它与流无关(好吧,流是您应该在适合您的需要时使用的工具,不方便时不要强迫自己使用它)

流方法:

如果您更喜欢步行和流媒体,您可以执行以下操作:

Stream<Path> files = Files.walk(Paths.get("somePath")).forEach(path -> doSomethingWithPath(path));

不知道为什么在这里需要 SimpleFileVisitor,作为您的解释:

因为需要

很神秘;)

于 2018-03-15T18:55:35.337 回答