说我有这样一件事
Stream<Path> files = Files.walk(Paths.get(somePath))然后我流经并收集
但是我想把它转换成使用SimpleFileVisitor,因为它是需要的,我会怎么做呢?我搜索并尝试了几个小时,却没有得到任何结果。您甚至可以在SimpleFileVisitor中使用流吗?还是我需要重新做一遍这个方法?据我所知,我需要几种方法来使用SimpleFileVisitor,我对此感到困惑。Files.walk很简单,但它对我的意图不起作用。
发布于 2018-03-15 18:55:35
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,作为您的解释:
因为它是需要的
相当神秘;)
https://stackoverflow.com/questions/49302966
复制相似问题