java字符流操作flush()方法及其注意事項


java字符流操作flush()方法及其注意事項

 

flush()方法介紹

 

查閱文檔可以發現,IO流中每一個類都實現了Closeable接口,它們進行資源操作之后都需要執行close()方法將流關閉 。但字節流與字符流的不同之處在於:字節流是直接與數據產生交互,而字符流在與數據交互之前要經過一個緩沖區 。 
草圖: 
這里寫圖片描述

使用字符流對資源進行操作的時候,如果不使用close()方法,則讀取的數據將保存在緩沖區中,要清空緩沖區中的數據有兩種辦法:

  • public abstract void close() throws IOException 
    關閉流的同時將清空緩沖區中的數據,該抽象方法由具體的子類實現
  • public abstract void flush() throws IOException 
    不關閉流的話,使用此方法可以清空緩沖區中的數據,但要注意的是,此方法只有Writer類或其子類擁有,而在Reader類中並沒有提供。此方法同樣是在具體的子類中進行實現 。
public class Writer_Flush_Test { public static void main(String[] args) throws IOException { File file = new File("D:" + File.separator + "IOTest" + File.separator + "newFile.txt"); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } Writer w = new FileWriter(file, true); w.flush(); w.write("@@@這是測試flush方法的字符串***\n"); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

結果可以發現,清空了緩沖區中的數據再向文件中寫入時,數據寫不進去 。 
這里寫圖片描述

 

flush()使用注意事項

 

修改以上代碼,當清空緩沖區,再寫入之后,如果再執行close()關閉流的方法,數據將正常寫入 。

public class Writer_Flush_Test { public static void main(String[] args) throws IOException { File file = new File("D:" + File.separator + "IOTest" + File.separator + "newFile.txt"); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } Writer w = new FileWriter(file, true); w.flush(); w.write("@@@這是測試flush方法的字符串***\n"); // 執行之前操作之后使用close()關閉流 w.close(); }

微信公眾號【黃小斜】大廠程序員,互聯網行業新知,終身學習踐行者。關注后回復「Java」、「Python」、「C++」、「大數據」、「機器學習」、「算法」、「AI」、「Android」、「前端」、「iOS」、「考研」、「BAT」、「校招」、「筆試」、「面試」、「面經」、「計算機基礎」、「LeetCode」 等關鍵字可以獲取對應的免費學習資料。 

 

 

                     

可以發現此時正常寫入文件中 。具體原因未知,希望明白的朋友告知,但就目前來看,要做的是一定要避免這樣的錯誤 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM