博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java字符流操作flush()方法及其注意事项
阅读量:5061 次
发布时间:2019-06-12

本文共 1447 字,大约阅读时间需要 4 分钟。

 

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(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这里写图片描述 

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

转载于:https://www.cnblogs.com/xll1025/p/6424528.html

你可能感兴趣的文章
PHP的SQL注入技术实现以及预防措施
查看>>
软件目录结构规范
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
Android 自定义View (三) 圆环交替 等待效果
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
HEVC播放器出炉,迅雷看看支持H.265
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
Eclipse 调试的时候Tomcat报错启动不了
查看>>
【安卓5】高级控件——拖动条SeekBar
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android入门之文件系统操作(二)文件操作相关指令
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
java学习笔记之String类
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>
mongo备份操作
查看>>
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>