将 Files.walk 转换为 SimplefileVisitor
Convert Files.walk to a SimplefileVisitor
说我有这样的事情
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 在这里,作为你的解释:
because it is needed
很神秘;)
说我有这样的事情
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 在这里,作为你的解释:
because it is needed
很神秘;)