首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >try-with-resources或close()困境

try-with-resources或close()困境
EN

Stack Overflow用户
提问于 2013-07-28 16:31:01
回答 3查看 107关注 0票数 1

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

代码语言:javascript
复制
public void workOnFiles() throws IOException {

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

或者我应该这样做:

代码语言:javascript
复制
public void workOnFiles() throws IOException {

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

回答 3

Stack Overflow用户

发布于 2013-07-28 16:32:42

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

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

票数 5
EN

Stack Overflow用户

发布于 2013-07-28 16:36:03

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

其中,作为第二个代码,如果出现异常,请不要关闭资源。

因此,如果您使用java7,则可以使用try-with-resources,否则可以使用tryfinally块编辑您的代码。

finally block guarantees execution irrespective of exception raises or not

票数 0
EN

Stack Overflow用户

发布于 2013-07-28 16:39:23

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

代码语言:javascript
复制
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();
     }   
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17906447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档