[Java] try-with-resources 說明, 如何自動 close BufferedReader 等 IO 物件

每次用到 BufferReader , IO 等物件時候,通常都要寫 很多 try catch 去確保 物件有 close ,免得memory leak issue,像是以下程式碼

請看下面這個例子:
package idv.jacky.ironman4;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Day20Example {

 public static void main (String[] args) throws IOException {
  BufferedReader br = null;
  try {
   br = new BufferedReader(new FileReader("c:\\temp.txt"));
   String line;
   while ((line = br.readLine()) != null)
    System.out.println(line);
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (br != null)
    br.close();
  }

 }
}
上面的例子,可以看到程式碼非常多的巢結構,可以改成以下的寫法
請看下面這個例子:
package idv.jacky.ironman4;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Day20Example {

 public static void main (String[] args) throws IOException {

  try  (BufferedReader br = new BufferedReader(new FileReader("c:\\temp.txt"))){   String line;
   while ((line = br.readLine()) != null)
    System.out.println(line);
  } catch (IOException e) {
   e.printStackTrace();
  } 

 }
}
上面的例子,只要出 try 巢 , 就會自動關閉!
相關的資料可以看 Java 的官方文件 :  

The try-with-resources Statement

那麼如果自己要寫一個能夠支援 try-with-resource 的物件,只要該物件實做

java.lang.AutoCloseable   介面就可以用了,不用一值瘋狂 close了









留言

這個網誌中的熱門文章

angular 如何Http 如何設定 CORS (Cross-Origin Resource Sharing)

Google Map 單車路徑計算坡度和角度小工具

Google URL Shortener API 快速教學