将Files.walk转换为SimplefileVisitor

时间:2018-03-15 15:07:44

标签: java simplefilevisitor

说我有这样的事情

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

然后我流过并收集

然后我想将它转换为使用SimpleFileVisitor而不是因为它需要,我该怎么办?我用Google搜索并试了几个小时没有得到任何东西。你甚至可以使用SimpleFileVisitor使用Stream吗?或者我是否需要重做该方法?据我所知,我需要一些方法来使用SimpleFileVisitor,我对此感到困惑。 Files.walk非常简单,但它对我的意图不起作用。

1 个答案:

答案 0 :(得分: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) {
      ...
}

这使您可以在访问每个文件时执行操作,但它与流无关(井流是一种在满足您的需求时应该使用的工具,不要强迫自己在不方便的时候使用它)< / p>

流式方法:

如果你喜欢散步和放大您可以执行以下操作:

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

不知道为什么你需要SimpleFileVisitor,作为你的解释:

  

因为需要

非常神秘;)

相关问题