java - 当我已经拥有 BufferReader 对象时,为什么它要求我用 try catch 包围它?

标签 java exception bufferedreader

我正在编写一个程序,其中使用 BufferedReader 对象从用户处获取输入,然后在 catch block 中捕获 BufferedReader 对象抛出的 IOException,但当我在 finally block 中关闭资源时,为什么它说用 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 (source) :

If an I/O error occurs

这就是为什么 close 方法可能抛出的 IOException 也需要被捕获,因为它位于 finally block 中,而不是在现有的 try catch block 中:

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

关于java - 当我已经拥有 BufferReader 对象时,为什么它要求我用 try catch 包围它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53748241/

相关文章:

java - 如何在Java中从S3读取Snappy压缩文件

java - JDK中有没有一个好的异常类来应对用户输入太长的情况?

java - 在同一个 throws 子句中声明父异常和子异常有用吗?

Java 实现异常处理

java - 为 bufferedReader 选择另一个目录中的文件

java bufferedreader,声明readline

java - 空白字段上的@Pattern 验证

java - Bitbucket 管道找不到 Gradle

Java Custom Date 类 date To String() 未将日期打印为 String

java - Logger 和 System.out.println 的输出不按顺序