一、字符输出流
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) throws IOException {
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) throws IOException {
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) throws IOException {
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);//abcde
6
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) throws IOException {
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:
Linux / Unix:
mac:
Demo :
1 public static void main(String[] args) throws IOException {
2 FileWriter fw = new FileWriter("E:\g.txt",true);
3 for (int i = 0; i <10 ; i++) {
4 fw.write("HelloWorld"+i+"
");
5 }
6
7 fw.close();
8 }