Java:io流之输出流flush和close

这几天学习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田
  1. 虽然参数为int类型四个字节,但是只会保留一个字符的信息写出。
  2. 未调用close方法,数据只是保存到了缓冲区,并未写出到文件中;但FileOutputStream不关闭流也可以保存到文件中。

参考来自黑马,侵删

posted @   CodeWater  阅读(1222)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示