java - 为什么当我已经拥有 BufferReader 对象时,它要求我用 try catch 包围它?
问题描述
我正在编写一个程序,在该程序中我使用 BufferedReader 对象从用户那里获取输入,然后在 catch 块中捕获 BufferedReader 对象抛出的 IOException 但是当我在 finally 块中关闭资源时,为什么它说用 try/catch 包围或声明 IOException
这是程序
public class BufferedReader3 {
public static void main(String[] args){
// TODO Auto-generated method stub
InputStreamReader r=null;
BufferedReader br=null;
String name="";
try
{
r =new InputStreamReader(System.in);
br =new BufferedReader(r);
while(!name.equals("stop"))
{
System.out.println("Enter data: ");
name=br.readLine();
}
System.out.println("data is: "+name);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
br.close();
r.close();
}
}
}
解决方案
该close
方法可以抛出一个IOException
原因如下(来源):
如果发生 I/O 错误
这就是为什么该IOException
方法close
可能抛出的也需要被捕获的原因,因为它在finally
块中它不在您已经存在的try catch
块中:
finally {
try {
br.close();
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}
推荐阅读
- java - 类在使用扩展方法时返回扩展类的参数而不是它自己的参数
- javascript - 这两个闭包有什么区别?
- flutter - 如何在颤振流中正确调用 S3 文件?
- geometry - 如何在 Yelp 或 Uber 服务中使用 S2?
- javascript - 在 Bootstrap 5 中实现暗/亮/...模式的最合适方法是什么?
- python - GridSearchCV 没有为 xgboost 选择最佳超参数
- swift - 用新数据重新加载 PageViewController
- uwp - ObservableCollection 在 UWP 和 WASM 上的行为不同
- nginx - 在 nignx 中动态重写路径
- module - 如何使用 Xquery 为 MarkLogic 实现自动递增数字主键