分享

Java 7中自动关闭流和catch多个异常

 馆天下ccf 2018-03-22

在我们平时的开发工作中, 经常需要读写流,在这个过程最让人蛋疼的就是各种try和catch, 然后到最后你还不能忘记关闭流,以免造成资源泄露,这一整套下来感觉显得特别的臃肿。下面是一个简单的示例 :

  1. // 老的资源打开方式  
  2.         BufferedReader br = null;  
  3.         try {  
  4.             br = new BufferedReader(new FileReader(  
  5.                     "/Users/mrsimple/update_hosts.py"));  
  6.             StringBuilder sb = new StringBuilder();  
  7.             String line = "";  
  8.             while ((line = br.readLine()) != null) {  
  9.                 sb.append(line).append("\n");  
  10.             }  
  11.             System.out.println(sb.toString());  
  12.         } catch (FileNotFoundException e) {  
  13.             e.printStackTrace();  
  14.         } catch (IOException e) {  
  15.             e.printStackTrace();  
  16.         } finally {  
  17.             if (br != null) {  
  18.                 try {  
  19.                     br.close();  
  20.                 } catch (IOException e) {  
  21.                     e.printStackTrace();  
  22.                 }  
  23.             }  
  24.         } // end of finaly  

好在java 7 推出了两项很实用的特性, 那就是流的自动关闭和catch多个异常。使用这两个新特性后实现相同功能所需的代码如下 : 

  1. // java 7中的资源打开方式  
  2. try (BufferedReader newBr = new BufferedReader(new FileReader(  
  3.         "/Users/mrsimple/update_hosts.py"))) {  
  4.     StringBuilder sb = new StringBuilder();  
  5.     String line = "";  
  6.     while ((line = newBr.readLine()) != null) {  
  7.         sb.append(line).append("\n");  
  8.     }  
  9.     System.out.println(sb.toString());  
  10. } catch (IOException | FileNotFoundException e ) {  
  11.     e.printStackTrace();  
  12. }  
在try区块中构建newBr对象,则该对象会在该区块结束时自动关闭, 免去了开发者手动关闭流。catch多个异常也使得代码更加的简洁。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约