一、字符输出流

java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。

它定义了字节输出流的基本共性功能方法。

void write(int c) 写入单个字符。写入0 到 65535 之间的Unicode码。

void write(char[] cbuf) 把整个字符数组的内容写进去。

abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len写的字符个数。

void write(String str) 写入字符串。

void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。

void flush() 刷新该流的缓冲,则立即将它们写入预期目标。

void close() 关闭此输出流并释放与该流关联的所有系统资源

Writer 抽象类下面的子类结构:

图中深色的为节点流,浅色的为处理流。

二、FileWriter 类

java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区 。

作用:把内存中字符数据写入到文件中。

1、构造方法

FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。

FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。

参数:写入数据的目的地。

File file:文件对象

String fileName:文件的路径。

构造方法作用:

① 会创建一个 FileWriter 对象

② 会根据构造方法中传递的文件 / 文件的路径,创建对象

③ 会把 FileWriter 对象指向创建好的文件。

字符输出流的使用步骤【重要】:

① 创建FileWriter对象,构造方法中绑定要写入数据的目的地

② 使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)

③ 使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中

④ 释放资源(会先把内存缓冲区中的数据刷新到文件中)

2、基本写入数据

(1)写出字符:write(int b) 方法,每次可以写出一个字符数据,代码使用演示:

1 public static void main(String[] args) throwsIOException {2 //1.创建FileWriter对象,构造方法中绑定要写入数据的目的地

3 FileWriter fw = new FileWriter("E:\\d.txt");4 //2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)5 //void write(int c) 写入单个字符。

6 fw.write(97);7 //3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中8 fw.flush();9 //4.释放资源(会先把内存缓冲区中的数据刷新到文件中)

10 fw.close();11 }

注意:如果未调用 close 方法,数据只是保存到了缓冲区,并未写出到文件中。

(2)关闭与刷新

区别:

flush :刷新缓冲区,流对象可以继续使用。

close : 先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

Demo:

1 public static void main(String[] args) throwsIOException {2 //1.创建FileWriter对象,构造方法中绑定要写入数据的目的地

3 FileWriter fw = new FileWriter("E:\\e.txt");4 //2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)5 //void write(int c) 写入单个字符。

6 fw.write(97);7 //3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中

8 fw.flush();9 //刷新之后流可以继续使用

10 fw.write(98);11

12 //4.释放资源(会先把内存缓冲区中的数据刷新到文件中)

13 fw.close();14

15 //close方法之后流已经关闭了,已经从内存中消失了,流就不能再使用了

16 fw.write(99);//IOException: Stream closed

17 }

注意:即便是flush方法写出了数据,操作的最后还是要调用close方法,释放系统资源。

3、写出其他数据

(1)写出字符数组:write(char[] cbuf) 和 write(char[] cbuf, int off, int len) ,每次可以写出字符数组中的数据,用法类似FileOutputStream,代码使用演示:

1 public static void main(String[] args) throwsIOException {2 FileWriter fw = new FileWriter("E:\\f.txt");3 char[] cs = {'a','b','c','d','e'};4 //void write(char[] cbuf)写入字符数组。

5 fw.write(cs);//abcde6

7 //void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。

8 fw.write(cs,1,3);//bcd

9

10 fw.close();11 }

(2)写出字符串:: write(String str) 和 write(String str, int off, int len) ,每次可以写出字符串中的数据,更为方便,代码使用演示:

1 public static void main(String[] args) throwsIOException {2 FileWriter fw = new FileWriter("E:\\f.txt");3

4 //void write(String str)写入字符串。

5 fw.write("博客园");//博客园6

7 //void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。

8 fw.write("天道酬勤啊",2,3);//酬勤啊

9

10 fw.close();11 }

(3)续写和换行

续写,追加写:使用两个参数的构造方法

FileWriter(String fileName, boolean append)

FileWriter(File file, boolean append)

参数:

String fileName,File file:写入数据的目的地。

boolean append:续写开关 true:不会创建新的文件覆盖源文件,可以续写; false:创建新的文件覆盖源文件。

换行:换行符号

windows:\r\n

Linux / Unix:\n

mac:\r

Demo :

1 public static void main(String[] args) throwsIOException {2 FileWriter fw = new FileWriter("E:\\g.txt",true);3 for (int i = 0; i <10 ; i++) {4 fw.write("HelloWorld"+i+"\r\n");5 }6

7 fw.close();8 }

注意:字符流,只能操作文本文件,不能操作图片,视频等非文本文件。单纯读或者写文本文件时,使用字符流,其他情况使用字节流。

java 字符输出流_Java 之 字符输出流[Writer]相关推荐

  1. java 文件字节流_Java:文件字符流和字节流的输入和输出

    最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向:     输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...

  2. java 字节编码_java中字符与字节的编码关系

    一个英文字母字符存储需要1个字节.在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节. 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节.在 ...

  3. java io字符输出流_JAVA IO 字符输入流与输出流总结说明

    目录 OutputStreamWriter 用于向本地文件中写入数据 InputStreamReader 用于读取本地文件中的字节数据 FileReader 用于读取本地文件中的字节数据 FileWr ...

  4. java 字节流 区别_java字节流字符流区别-嗨客网

    Java字节流与字符流区别 Java字节流与字符流区别教程 我们在 实际上字节流在对文件操作的时候,不会用到缓冲区(内存),对文件本身直接操作而字符流在对文件操作的时候用到了缓冲区,通过缓冲区来对文件 ...

  5. java 对象读写_java 对象输入输出流读写文件的操作实例

    java 对象输入输出流读写文件的操作实例 java 支持对对象的读写操作,所操作的对象必须实现Serializable接口. 实例代码: package vo; import java.io.Ser ...

  6. java stringbuffer数组_Java中字符数组、String类、StringBuffer三者之间相互转换

    一.StringBuffer与String的相互转换 1.将StringBuffer转换成String StringBuffer类成员toString函数可将其转换成String类型. StringB ...

  7. java字符串匹配_Java实现字符串匹配(基于正则)

    有一个String,如何查询其中是否有y和f字符?最黑暗的办法就是: 程序1:我知道if.for语句和charAt() class Test{ public static void main(Stri ...

  8. java 半角数字_Java中字符的半角和全角

    前几天在工作中遇到一个问题 在一个程序中进行Excel的导入,将Excel中的一系列城市编码在程序中解析,转换为int型,因为Excel中的部分城市编码带有空格,因此需要在代码中将其转换为String ...

  9. java 字符串子串_java实现字符串匹配求两个字符串的最大公共子串

    本文实例讲述了java实现求两个字符串最大公共子串的方法.分享给大家供大家参考,具体如下: 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结了这篇博客内容:求两个字符串的最大公共子串 ...

最新文章

  1. Linux下用C语言最基本的程序开发与调试
  2. esxi宿主机的本地存储-非活动
  3. chrome设置微信ua_新支付宝json_ua分析
  4. 【牛客 - 303D第十五届浙江大学宁波理工学院程序设计大赛(同步赛)】Campaign(二进制枚举,位运算,暴力,思维)
  5. 刷新页面,无论点击多少次让Element UI的Message消息提示弹出一个
  6. kubernetes视频教程笔记 (6)-kubernetes集群安装
  7. Atitit pwa app prblm sulo目录1.1.1. 安卓的chrome没有弹添加到桌面的弹窗 11.1.2. 如何判断是否从主屏幕访问 11.1.3. 如何监听添加到桌面事
  8. dota2 自定义官方服务器,DOTA2官网更新:服务器扩容 首部官方漫画发布
  9. Maven知识补充(项目模型变量,Maven属性,依赖项的范围,查找公共存储库的依赖项等)
  10. JavaScript 身份证格式验证
  11. php视频直播系统源码Android 修改状态栏颜色 白色、透明色
  12. MySQL 错误【四】Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp
  13. python 白噪声检验-使用python实现时间序列白噪声检验方式
  14. 卖动感单车能帮助keep走出变现困境吗?
  15. CTF-攻防世界web新手入门篇
  16. 专家解读:读研到底值不值(转自中华英才网)
  17. Java云电子病历系统源码,提供电子病历在线制作、管理和使用的一体化电子病历
  18. 天地图标注获取与修改并保存信息
  19. 高项论文练习--项目进度管理
  20. 2013年炙手可热的5种工作

热门文章

  1. H3C AC+AP三层组网架构,AP自动上线自动固化
  2. redash+mysql_Redash本地开发环境搭建
  3. python局域网嗅探_使用python来嗅探局域网内的qiuqiu号码
  4. 云顶之弈机器人法爆_云顶之弈有什么套路?
  5. Linux Mint 18.1 下安装网易云音乐1.0
  6. UEFI启动与BIOS启动哪个好,有什么区别
  7. Win10 VS调试MiniBlink
  8. 怎么才能学好java?java的学习方法
  9. 听说你想去大厂看学姐,带你看看虎牙产品运营三面+HR面
  10. redis命令,开发规范以及应用场景