FileWriter和FileOutputStream

1.下面代碼的執行結果及其分析
FileWriter fw=new FileWriter("c:\test.txt");
fw.write("abcdefgh");
結果:運行上面的代碼會創建一個test.txt的文件,但是文件中並沒有內容,是一個空的文件。

原因如下:

(1)FileWriter繼承自OutputStreamWriter,在FileWriter中除了構造函數並沒有其它的方法,在FileWriter的構造函數中,會先封裝出一個OutputStream傳遞給父類OutputStreamWriter構造出父類的對象,調用FileWriter的write方法,其實就是調用的OutputStreamWriter的write方法

(2)在OutputStreamWriter中有一個StreamEncoder對象,調用OutputStreamWriter的write方法,其實就是調用的StreamEncoder的write方法

(3)在StreamEncoder中有一個字節緩衝區,會先把準備寫入目的的字符先轉變爲字節,等緩衝區滿了或者流被刷新後,流中的數據就寫到目的中去。

所以,上面準備寫如的字符,由於沒有刷新流,所以實際上是寫到了StreamEncoder的字節緩衝區中去了;所以文件中沒有內容!



2.

FileOutputStream fos=new FileOutputStream("c:\test.txt");
fos.write("abcdefgh".getBytes());

結果:運行上面的代碼會創建一個test.txt的文件,並且文件中有內容。

原因:FileOutputStream直接繼承自OutputStream,調用FileOutputStream的write方法的時候,實際上就在調用底層的寫方法,把數據直接寫到文件中去了,沒有緩存。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章