说我有这样的事情

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


然后我流过并收集

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

最佳答案

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作为解释:


  因为需要


非常神秘;)

关于java - 将Files.walk转换为SimplefileVisitor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49302966/

10-09 01:54