2015-10-14 90 views
3

我見過java7 try-with-resources。如果可關閉的資源是params,那麼我們不需要聲明資源。對於這種情況,我們該如何使用此功能?如何使用Java7試用資源功能作爲參數傳遞資源

public static void write(byte[] b, OutputStream os) throws Exception { 
    try { 
     os.write(b); 
    } 
    catch(Exception e) { 
     logger.log(Level.INFO, "Exception in writing byte array"); 
    } 
    finally { 
     try { 
      if(os != null) { 
       os.close(); 
      } 
     }catch(Exception e) { 
      logger.log(Level.INFO, "Exception while close the outputstream"); 
      throw e; 
     } 
    } 
} 
+0

附註:關閉流通常是實體t的責任帽子打開了小溪。看起來很奇怪,你接受一個開放流並在你返回之前關閉它。 (如果我想用你的方法將東西寫入文件,然後在你的內容之後添加其他內容?) – aioobe

+1

如果你真的想這樣做,你可以簡單地執行try(OutputStream os2 = os){ ...} – aioobe

+0

在我的情況下,我相信我不會追加內容後。我寫這個代碼作爲一種實用方法。 – RJSV

回答

4

你可以簡單的寫:

static void write(byte[] b, OutputStream os) throws Exception { 
    try (OutputStream o = os) { 
     o.write(b); 
    } 
} 
+0

如果我們這樣做,資源「o」只會自動關閉,「os」資源保持打開狀態? – RJSV

+0

由於'o = os' os被關閉,因爲它是一樣的東西。 – Flown

0

一旦try塊完成,它會調用該方法close關閉資源

try (BufferedWriter bw = new BufferedWriter(new FileWriter("file.out"))) { 
     bw.write("something"); 
    } 

資源應實現Closable接口