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
}
});