gpt4 book ai didi

java - 在java中应该如何更好地处理这个异常?

转载 作者:行者123 更新时间:2023-11-29 08:30:51 24 4
gpt4 key购买 nike

所以我正在编写这段代码(见下文),我的老师说只制作一个 System.out.println 是不好的做法,我应该做一些其他事情来更好地处理异常.但是如何呢?

public static List<Highscore> readHighScoreTable(String fileName) {
//creates a new ArrayList of highscores.
List<Highscore> result = new ArrayList<Highscore>();
try {
//creates a new bufferedReader that reads from the file.
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line = null;
//a loop that reads through all the lines in the file.
while((line = reader.readLine()) != null) {
//some code }
reader.close();
} catch(IOException ioe) {
//If there is a problem, it prints a error message.
System.out.println("There was a problem reading your file.");
}
return result;
}

非常感谢任何帮助。

最佳答案

事实上,处理异常的方法大致有两种。
捕获它让执行继续或将它传播给调用者。

这里你选择了第一种方式:

catch(IOException ioe) {
//If there is a problem, it prints a error message.
System.out.println("There was a problem reading your file.");
}

但您只是在输出中写了一条文本消息。
那还不够。要获得有值(value)的信息,您需要包含异常和引发异常的语句的整个堆栈跟踪。
您可以将其写入错误标准:ioe.printStackTrace() 或使用记录器更好。

此处您选择了第一种方式(捕获异常),因为您希望返回列表,即使在 Scanner.readLine() 期间发生了 IOException
在某些情况下,它可能是可以接受的。
在其他情况下,要求可能不同,您不想从异常中恢复。所以你让它传播给调用者。
在这种情况下,列表当然不会返回任何添加的元素。

这是一个将异常传播给调用者的版本。
请注意,在任何情况下都应关闭输入流。
所以要么在 finally 语句中完成,要么更好,使用 try-with-resources确保资源释放的语句。

public static List<Highscore> readHighScoreTable(String fileName) throws IOEexception {
//creates a new ArrayList of highscores.
List<Highscore> result = new ArrayList<Highscore>();

//creates a new bufferedReader that reads from the file.
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))){
String line = null;
//a loop that reads through all the lines in the file.
while((line = reader.readLine()) != null) {
//some code
}
}
return result;
}

和代码客户端:

try{
List<Highscore> highScores = readHighScoreTable("filename");
}
catch (IOException e){
// log the exception
// give a feeback to the user
}

关于java - 在java中应该如何更好地处理这个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48354979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com