我只是尝试使用BufferedReader读取文本文件,并且我使用try-catch
块来假设捕获任何IOExceptions
。我认为它确实如此,甚至在问题出现的情况下添加了FileNotFoundException
。但我还是得到了:
错误:未报告的异常java.lang.Exception;必须被抓住或宣布被抛出
而且我不明白我没有抓到的部分。这是我的代码:
public Grade load(){
Grade newList = new Grade();
try {
int year;
String newLine;
BufferedReader inFile = new BufferedReader(new FileReader(inputName));
while((newLine = inFile.readLine())!= null){
year = Integer.parseInt(inFile.readLine());
newList.addGrade(new Grade(year));
}
inFile.close();
}//try
catch (FileNotFoundException e) {
System.out.println("Failed to copy the file: "+e.getMessage());}
catch(IOException e){
System.out.println("Failed to copy the file: "+e.getMessage());}
return newList;
}//load
答案 0 :(得分:0)
我假设Grade.addGrade方法或Grade构造函数被声明为抛出java.lang.Exception
使用Integer.parse方法时捕获java.lang.NumberFormatException也是一种很好的做法。
答案 1 :(得分:0)
首先,如果你想知道要捕获什么(或者更好地说,抛出什么),首先需要查看Java文档。这将向您展示每个官方支持的类的每个方法的详细概述,因此您最好在执行输入/输出等敏感操作之前查看它。
所以,我建议做的是在现有语句的末尾添加一个额外的catch
块,并使其捕获java.lang.Exception
,更好地称为主异常,从中派生所有其他异常并进行扩展。
这不是解决问题的最理想的方法,但它不会像在多if语句的末尾放置else
语句那么大,因为你只是提供所有其他块发生故障时的后备块。这只是满足编译器的额外保护层。
这只是演示代码,只是为了展示应该做什么。由于我不知道你的项目是什么,和/或你在做什么,我只会展示你需要做什么的准系统,并且我知道如何直接或间接导致任何事情发生。最终产品中使用的代码。
public Grade load(){
Grade newList = new Grade();
try {
int year;
String newLine;
BufferedReader inFile = new BufferedReader(new FileReader(inputName));
while((newLine = inFile.readLine())!= null){
year = Integer.parseInt(inFile.readLine());
newList.addGrade(new Grade(year));
}
inFile.close();
}//try
catch (FileNotFoundException e) {
System.out.println("Failed to copy the file: "+e.getMessage());}
catch(IOException e){
System.out.println("Failed to copy the file: "+e.getMessage());}
return newList;
}catch(Exception e){
e.printStackTrace();
//...OTHER HANDLING CODE. THE ABOVE COULD BE LEFT BLANK...//
}//load