2011-07-05 57 views
4

可能重複:
Best way to close nested streams in Java?收盤嵌套流

我們如何關閉嵌套的流?關閉所有這些?如果是,訂單是什麼?

FileOutputStream out = new FileOutputStream("data.txt", true); 
PrintWriter pout = new PrintWriter(out); 

/* do some I/O */ 

pout.close(); 
out.close(); 

或關閉大部分流將關閉所有這些。

pout.close(); // Is this enough? 

回答

8

當關閉鏈接流時,您只需關閉最外面的流。任何錯誤都會在鏈上傳播並被捕獲。

看看here。可能這個問題之前已經被問到過了。

3

finally塊始終關閉資源:

acquire(); 
try { 
    use(); 
} finally { 
    release(); 
} 

你只在這裏的資源是FileOutputStream,所以它是唯一一個真正需要被關閉。如果PrintWriter構造函數被拋出,那麼你真的應該釋放FileOutputStream,這就排除了只關閉PrintWriter

請注意,你真的想要flushPrintWriter。這隻需要在非例外情​​況下完成,因此不需要最終。