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」 等关键字可以获取对应的免费学习资料。

可以发现此时正常写入文件中 。具体原因未知,希望明白的朋友告知,但就目前来看,要做的是一定要避免这样的错误 。

最新文章

  1. 数位DP之奥义
  2. 使用 IntraWeb (38) - TIWAppForm、TIWForm、TIWBaseHTMLForm、TIWBaseForm
  3. PHP上传遇到的问题-php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项
  4. Erlang分布式在linux和windows上的注意事项
  5. MFC 用gdi绘制填充多边形区域
  6. $.ajax()方法详解 jquery中的ajax方法
  7. 调试技术(/proc、/sys、/dev、strace)
  8. js数组及数组应用(冒泡和二分,遍历输出)
  9. 前端菜鸟学习之DOM事件处理
  10. android数据库持久化框架, ormlite框架,
  11. pandas(三)
  12. (1)Python基础
  13. WebSphere的jython编码的一个坑
  14. Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面
  15. FastAdmin 教程草稿大纲
  16. nginx正确服务react-router应用
  17. Entity Framework底层操作封装V2版本号(4)
  18. NSFileManager和NSFileHandle(附:获取文件大小 )
  19. Mysql自带profiling性能分析工具使用分享
  20. android 代码设置、打开wifi热点及热点的连接(转)

热门文章

  1. RNQOJ PID28 / [Stupid]愚蠢的宠物
  2. 检查SQL Server被哪个进程占用,且杀进程。
  3. 绕过D盾的php一句话
  4. vscode 添加 includePath
  5. spring 装配
  6. ssh框架 基本整合
  7. python 上传文件
  8. 协程 及 libco 介绍
  9. 全面了解移动端DNS域名劫持等杂症:原理、根源、HttpDNS解决方案等
  10. Java项目启动时执行指定方法的几种方式