繁体   English   中英

try-with-resources或close()困境

[英]try-with-resources or close() dilemma

我有一个可以引发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();    
}

在第二个中,如果引发异常,则不会关闭您的fis 一种选择是将可能引发异常的语句包含在try块中,并将fis封闭在finally块中。

但是,由于您已经在使用Java 7 ,因此应该使用try-with-resource

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

如果出现异常,则第二条代码不会关闭资源。
因此,如果您使用的是java7则可以使用try-with-resources ,也可以使用tryfinally块编辑代码。

finally block guarantees execution irrespective of exception raises or not

如果您热衷于使用第二种方法,请在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();
     }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM