Java 捕捉lambda表达式中的异常

Java 捕捉lambda表达式中的异常,java,java-8,Java,Java 8,我有使用Files.walk的最简单代码: Stream<Path> stream = Files.walk(Paths.get("C:\\")); stream.forEach(f -> { System.out.println(f); }); 但是会引发相同的异常(即使执行stream.filter(f->false)也会失败) 编辑:请注意,我不想重新引发异常()。因此,使用s.forEach(LambdaExceptionUtil.rethrowConsume

我有使用Files.walk的最简单代码:

Stream<Path> stream = Files.walk(Paths.get("C:\\"));
stream.forEach(f -> {
    System.out.println(f);
});
但是会引发相同的异常(即使执行
stream.filter(f->false)
也会失败)


编辑:请注意,我不想重新引发异常()。因此,使用
s.forEach(LambdaExceptionUtil.rethrowConsumer(System.out::println))
仍然无法获得准确的堆栈跟踪。

如果目录列表是您想要的,那么为什么不改为使用DirectoryStreamPath呢?有关更多信息,请参见此处的文档:


此外,您可以将它与Java8结合使用,而且异常处理非常好。

要在递归目录遍历过程中忽略错误,您需要将
walkFileTree
与一个执行错误处理的


基于流的便利包装器(
walk
)只在遇到第一个错误时终止,这是无法避免的。

您无法在lambda中解决此问题,因为问题发生在漫游本身,而不是访问lambda。老实说,我不确定你是否能解决这个问题;在这个API中,我真的看不到防止这种情况的选项;你可能需要实现你自己的访问者。可能的副本不是我想要的-我只是想向你展示最简单的代码可能。。。
Exception in thread "main" java.io.UncheckedIOException: java.nio.file.AccessDeniedException: C:\Documents and Settings
    at java.nio.file.FileTreeIterator.fetchNextIfNeeded(Unknown Source)
    at java.nio.file.FileTreeIterator.hasNext(Unknown Source)
    at java.util.Iterator.forEachRemaining(Unknown Source)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining (Unknown Source)
    at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown 
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential (Unknown Source)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.util.stream.ReferencePipeline.forEach(Unknown Source)
    at devl.test.FindDuplicates.main(FindDuplicates.java:53)
Caused by: java.nio.file.AccessDeniedException: C:\Documents and Settings
    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsDirectoryStream.<init>(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.newDirectoryStream (Unknown Source)
    at java.nio.file.Files.newDirectoryStream(Unknown Source)
    at java.nio.file.FileTreeWalker.visit(Unknown Source)
    at java.nio.file.FileTreeWalker.next(Unknown Source)
    ... 11 more
Stream<Path> s = stream.filter(f -> !f.toFile().getAbsolutePath().contains("Documents and Setting"));   
s.forEach(f -> {