1

我有一个可以抛出 IOException 的函数,所以我不会在内部捕获异常。但是我有一些资源要关闭。使用try-with-resource(没有任何catch块)以这种方式这样做是否正确:

public void workOnFiles() throws IOException {

    try(FileInputStream fis = new FileInputStream("bau.txt");) {
        // Do some stuff
    }       
}

或者我应该这样做:

public void workOnFiles() throws IOException {

    FileInputStream fis = new FileInputStream("bau.txt");
    // Do some stuff
    fis.close();    
}
4

3 回答 3

5

在第二个中,如果抛出异常,您fis将不会被关闭。一种选择是将可以抛出异常的语句包含在一个try块中,并fis在一个finally块中关闭。

但是,由于您已经在J​​ava 7上,您应该使用try-with-resource

于 2013-07-28T08:32:42.233 回答
0

(Closeable resources)无论是否引发异常,try-with-resources 总是关闭资源(Work only java7 onwards)

如果出现异常,您的第二个代码不会关闭资源。
因此,try-with-resources如果您正在使用java7或编辑您的代码,则可以使用tryfinally阻止。

finally block guarantees execution irrespective of exception raises or not

于 2013-07-28T08:36:03.393 回答
0

如果您热衷于使用第二种方法,请在finally块中关闭资源。

public void workOnFiles() throws IOException {
   FileInputStream fis = null;
   try {
     fis = new FileInputStream("bau.txt");
   // Do some stuff
   }
   finally  {
     try {
      fis.close(); 
     }
     catch(Exception e) {
      //logger.error(e);
      // e.printStackTrace();
     }   
}
于 2013-07-28T08:39:22.737 回答