在項目開發中,今天也碰到類似的情況。因爲同事流關閉順序問題導致異常的情況。
初學者在Java的io流操作中往往最容易忘記的就是處理完之後流的關閉,但是好不容易記起來了,卻又出現java.io.IOException: Stream closed的異常,現在以記事本案例來演示此問題。
該異常提示“流”已經關閉,但是我們觀察源代碼,發現我們打開了兩個流,之後關閉這兩個流,但爲什麼提示流已經關閉呢?
要想解決這一個問題,首先需要了解“修飾類”的概念,在這裏“FileWriter 是被修飾者,BufferedWriter 是修飾者”,也可以通過增加File類緩衝提高學性能。
既然知道“FileWrite”是被修飾者,“BufferedWrite”是修飾者,如果用“嵌套”這個概念來理解這一問題,那麼很明顯,“FileWrite”是嵌套在“BufferedWrite”中的,所以,當先關閉“FileWrite”流時,“BufferedWrite”自然沒有了修飾對象,所以會拋出異常。
解決方法就是先關閉“BufferedWrite”修飾流,再關閉“FillWrite”流即可,如下圖: