我們如何關閉嵌套的流?關閉所有這些?如果是,訂單是什麼?
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?
我們如何關閉嵌套的流?關閉所有這些?如果是,訂單是什麼?
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?
當關閉鏈接流時,您只需關閉最外面的流。任何錯誤都會在鏈上傳播並被捕獲。
看看here。可能這個問題之前已經被問到過了。
與finally
塊始終關閉資源:
acquire();
try {
use();
} finally {
release();
}
你只在這裏的資源是FileOutputStream
,所以它是唯一一個真正需要被關閉。如果PrintWriter
構造函數被拋出,那麼你真的應該釋放FileOutputStream
,這就排除了只關閉PrintWriter
。
請注意,你真的想要flush
PrintWriter
。這隻需要在非例外情況下完成,因此不需要最終。