我该如何处理catch块中发生的异常?

时间:2013-09-04 06:54:38

标签: java exception exception-handling

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 个答案:

答案 0 :(得分:2)

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

Java 7 try-with-resources语句要自动关闭,您需要明确关闭资源流,

  

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

read more on documentaion

示例 -

try(BufferedReader in
       = new BufferedReader(new FileReader(file))){
  while((thisLine=in.readLine())!=null){
        ...  
  }
}catch (IOException e) {
  ...
}

答案 1 :(得分:1)

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

    try 
    {
      // actual code.
    } 
    catch (IOException e) {
      // handle exception
    }
    finally
    {
       try
       {
         in.close();
       }
       catch (IOException e) {
          // handle exception
       }  
    }

答案 2 :(得分:1)

finally block中进行,这是专门用于清理的。

来自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
}

答案 3 :(得分:0)

try {
    in = new BufferedReader(new FileReader(file));
    // stuff here
} finally {
    try {
        in.close()
    } catch (IOException e) {} // ignore
}