说我有这样的事情
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/