Java编译器抱怨未报告的IOException

Java编译器抱怨未报告的IOException,java,file-io,exception-handling,java-8,ioexception,Java,File Io,Exception Handling,Java 8,Ioexception,我正在尝试编写一个方法,列出目录中所有非隐藏文件。但是,当我添加条件时!Files.ishiden(filePath)我的代码不会编译,编译器返回以下错误: java.lang.RuntimeException: Uncompilable source code - unreported exception java.io.IOException; must be caught or declared to be thrown 我试图捕获IOException,但编译器仍然拒绝编译我的代码。

我正在尝试编写一个方法,列出目录中所有非隐藏文件。但是,当我添加条件
时!Files.ishiden(filePath)
我的代码不会编译,编译器返回以下错误:

java.lang.RuntimeException: Uncompilable source code - unreported exception 
java.io.IOException; must be caught or declared to be thrown
我试图捕获
IOException
,但编译器仍然拒绝编译我的代码。有什么明显的东西我遗漏了吗?代码如下所示

try {    
    Files.walk(Paths.get(root)).forEach(filePath -> {
        if (Files.isRegularFile(filePath) && !Files.isHidden(filePath)) {
            System.out.println(filePath);            
        } });
} catch(IOException ex) {    
  ex.printStackTrace(); 
} catch(Exception ex) {   
  ex.printStackTrace(); 
}

不允许传递给的lambda表达式引发异常,因此您需要在此处处理它:

Files.walk(Paths.get(root)).forEach(filePath -> {
    try {
        if (Files.isRegularFile(filePath) && !Files.isHidden(filePath)) {
            System.out.println(filePath);
        }
    } catch (IOException e) {
        e.printStackTrace(); // Or something more intelligent
    }
});
isHiddenFile()
抛出IOException,但您无法捕获它。实际上,
forEach()
将使用者作为参数,并且
Consumer.accept()
不能抛出任何选中的异常。因此,您需要通过传递给
forEach()
的lambda表达式捕获内部异常:


@编译器仍然拒绝编译我的代码”-有相同的错误还是不同的错误?@mikej有相同的错误您可以尝试这里概述的方法:注意,一般情况下,lambda表达式允许抛出异常。在这里使用的特定函数接口中不允许抛出异常。@TagirValeev我认为使用在我的回答中,不是“A”表达了这一观点,但重新阅读后,我同意这一点还不够清楚。我编辑了文本以澄清这一点。谢谢你的反馈!那可能是我的问题。在我的母语中没有冠词,所以有时我只是没有注意到它们给句子增加了额外的意义。然而,澄清是好的。
Files.walk(Paths.get(root)).forEach(filePath -> {
    try {
        if (Files.isRegularFile(filePath) && !Files.isHidden(filePath)) {
            System.out.println(filePath);            
        } 
    }
    catch (IOException e) {
         // do something here
    }
});