這幾天學習io流,剛開始沒注意輸出流的flush()和close()有什么區別。這里補充一下FileWriter。
flush和close
public void close()
:關閉此輸出流並釋放與此流相關聯的任何系統資源。public void flush()
:刷新此輸出流並強制任何緩沖的輸出字節被寫出。
可以看到,flush是刷新,close關閉並且釋放資源。
區別:
因為內置緩沖區的原因,如果不關閉輸出流,無法寫出字符到文件中。但是關閉的流對象,是無法繼續寫出數據的。如果我們既想寫出數據,又想繼續使用流,就需要flush
方法了。
flush
:刷新緩沖區,流對象可以繼續使用。close
:先刷新緩沖區,然后通知系統釋放資源。流對象不可以再被使用了。
flush
public class FWWrite {
public static void main(String[] args) throws IOException {
// 使用文件名稱創建流對象
FileWriter fw = new FileWriter("fw.txt");
// 寫出數據,通過flush
fw.write('刷'); // 寫出第1個字符,
fw.flush();//直接到文件中了,而不是還在緩沖區中。
fw.write('新'); // 繼續寫出第2個字符,寫出成功
fw.flush();//不關閉流對象,繼續寫出到文件。
// 寫出數據,通過close
fw.write('關'); // 寫出第1個字符
fw.close();
fw.write('閉'); // 繼續寫出第2個字符,【報錯】java.io.IOException: Stream closed
fw.close();
}
}
close
public class FWWrite {
public static void main(String[] args) throws IOException {
// 使用文件名稱創建流對象
FileWriter fw = new FileWriter("fw.txt");
// 寫出數據
fw.write(97); // 寫出第1個字符
fw.write('b'); // 寫出第2個字符
fw.write('C'); // 寫出第3個字符
fw.write(30000); // 寫出第4個字符,中文編碼表中30000對應一個漢字。
/*
【注意】關閉資源時,與FileOutputStream不同。
如果不關閉,數據只是保存到緩沖區,並未保存到文件。
*/
fw.close();//關閉之后才會寫出到文件中
}
}
輸出結果:
abC田
- 雖然參數為int類型四個字節,但是只會保留一個字符的信息寫出。
- 未調用close方法,數據只是保存到了緩沖區,並未寫出到文件中;但FileOutputStream不關閉流也可以保存到文件中。
參考來自黑馬,侵刪