1
BufferedReader in
       = new BufferedReader(new FileReader(file));
     try {
        while((thisLine=in.readLine())!=null){
        ...  
        }
    } catch (IOException e) {
                    //in.close();
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

在上面的代码中,我想关闭catch块中的读取缓冲区。但是我发现in.close函数也抛出了一个IOException。如果我在 catch 块中嵌套另一个 try-catch 块,它看起来很难看。那么,处理这种问题的正确方法是什么?

4

4 回答 4

2

您可以finally为此使用块。finally-block每次都执行,除非 jvm 异常退出。

Java 7try-with-resources语句自动关闭,需要显式关闭资源流,

try-with-resources 语句是声明一个或多个资源的 try 语句。资源是程序完成后必须关闭的对象。try-with-resources 语句确保每个资源在语句结束时关闭。任何实现 java.lang.AutoCloseable 的对象,包括所有实现 java.io.Closeable 的对象,都可以用作资源。

阅读更多关于文档

例子 -

try(BufferedReader in
       = new BufferedReader(new FileReader(file))){
  while((thisLine=in.readLine())!=null){
        ...  
  }
}catch (IOException e) {
  ...
}
于 2013-09-04T06:55:53.757 回答
1

关闭块中的资源finally,而不是块中的资源catch

    try 
    {
      // actual code.
    } 
    catch (IOException e) {
      // handle exception
    }
    finally
    {
       try
       {
         in.close();
       }
       catch (IOException e) {
          // handle exception
       }  
    }
于 2013-09-04T06:55:26.393 回答
1

finally 块中执行,这是专门用于清理的。

从 finally 块文档

运行时系统总是执行 finally 块中的语句,而不管 try 块中发生什么。所以它是进行清理的理想场所。

BufferedReader in
       = new BufferedReader(new FileReader(file));
     try {
        while((thisLine=in.readLine())!=null){
        ...  
        }
    } catch (IOException e) {
                    //in.close();
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {
       in.close
}
于 2013-09-04T06:56:04.243 回答
0
try {
    in = new BufferedReader(new FileReader(file));
    // stuff here
} finally {
    try {
        in.close()
    } catch (IOException e) {} // ignore
}
于 2013-09-04T06:57:31.990 回答