java - 用于尝试、捕获和最终用于 Scanner 和 BufferedReader 的正确方法
问题描述
试图在我的主要方法中为 Scanner 和 BufferedReader 了解 try-catch-finally 的最佳和最有效的方法。应该有两个不同的捕获或将它们合并为一个?
public static void main(String[] args) throws IOException {
//open file input stream
try {
BufferedReader reader = new BufferedReader(new FileReader("DATABASE.txt"));
//read file line by line
String line = null;
Scanner scan = null;
BST tree = new BST();
line = reader.readLine();
while(line != null) {
Employee emp = new Employee();
scan = new Scanner(line);
scan.useDelimiter(",");
while(scan.hasNext()){
emp.setEmployeeID(Integer.parseInt(scan.next()));
emp.setFirstName(scan.next());
emp.setLastName(scan.next());
emp.setSalary(Double.parseDouble(scan.next()));
line = reader.readLine();
}
tree.insert(emp);
}
reader.close();
tree.inOrder();
//System.out.println(empList);
} catch(IOException e){
e.printStackTrace();
}
解决方案
一个 catch 块就足够了。您可以添加一个 finally 块来关闭阅读器和扫描仪实例(如果它们不为空)。这样,无论 try 块是否正常完成或抛出异常,它们都将被关闭。应该添加空检查,因为 try 块可能无法达到两个对象的初始化,因为可能会发生异常。
推荐阅读
- javascript - 如果事件有规则,则在 eventClick 中返回具有 null 结束值的事件
- java - 如何在多个 mongo 存储库上使用 QueryDSL?
- sql - UPDATE TOP 会导致死锁吗?
- java - 未经授权的 [401] 肥皂
- ionic-framework - 如何在 Ionic 4 中获取离子组件的宽度?例如:离子网格
- python - 如何使用 str 默认值注释采用 AnyStr 的函数?
- azure - 如何在 Azure WAF 中防止误报阻止密码字段
- c# - 具有泛型 c# 的 API 控制器
- firebase - 如何减少 Cloud Firestore 读取?
- excel - 从提示添加绑定并使用 Office.js API 获取选定范围