我尝试使用以下代码:
Files.walk(Paths.get("/home"), FileVisitOption.FOLLOW_LINKS)
.map(p -> p.getFileName())
.map(f -> f.toString())
.filter(s -> s.endsWith(".rb"))
.forEach(o -> System.out.println(o));
当我以普通用户身份运行时,我在UncheckIOException中包含了AccessDeniedException。当以root身份运行时,我得到了正确的结果。
$ java helloJava8.LambdaExpr
Exception in thread "main" java.io.UncheckedIOException: java.nio.file.AccessDeniedException: /home/lost+found
at java.nio.file.FileTreeIterator.fetchNextIfNeeded(FileTreeIterator.java:88)
at java.nio.file.FileTreeIterator.hasNext(FileTreeIterator.java:104)
at java.util.Iterator.forEachRemaining(Iterator.java:115)
at .......
$sudo java helloJava8.LambdaExpr
hello.rb
我确实知道问题的原因,但我想知道如何吞下这个异常,因为如果我在Try-Catch
块中包装上面的代码,我得到了方法walk
完成工作并停止步行 - 通过fs。