首页 > 解决方案 > 为什么当我已经拥有 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();    
        }
    }

}

标签: javaexception-handlingbufferedreader

解决方案


close方法可以抛出一个IOException原因如下(来源)

如果发生 I/O 错误

这就是为什么该IOException方法close可能抛出的也需要被捕获的原因,因为它在finally块中它不在您已经存在的try catch块中:

finally {
    try {
        br.close();
        r.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

推荐阅读