字符输出流Writer
字符输出流Writer
java.io.Writer字符输出流,是所有字符输出流的顶层的父类,并且是一个抽象方法,这个父类中定义了一些共性的方法
子类共性的成员方法
void write(char[] cbuf)写入字符数组void write(int c)写入单个字符void write(String str)写入字符串void write(String str, int off, int len)写入字符串的某一部分abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分abstract void flush()刷新该流的缓冲abstract void close()关闭此流,但要先刷新它
由于Writer类同样是一个抽象类,所以这里我们通过他的孙子类FileWriter来解释说明Writer类
一、FileWriter类的构造方法
FileWriter(String fileName)根据给定的文件名构造一个 FileWriter 对象。FileWriter(File file)根据给定的 File 对象构造一个 FileWriter 对象。
参数:
① fileName:文件的路径
② file: 文件
在使用构造方法创建FileWriter类的对象的时候都干了什么?
① 创建以恶个FileWriter对象
② 会根据构造方法中传递的路径或者文件来创建一个文件
③ 会把FileWriter对象指向创建好的文件
二、字节输出流的基本使用
字符输出流的使用步骤:
- 创建FileWriter对象,构造方法当中绑定要写入数据的目的地
- 使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
- 使用FileWriter中的方法flush,把内存缓冲区当中的数据,刷新到文件当中
- 释放资源(在释放资源的时候会把内存缓冲区当中的数据刷新到文件当中,所以第三步我们可以不去主动刷新)
示范(一)
public static void main(String[] args) throws IOException {
// 创建FileWriter对象,构造方法当中绑定要写入数据的目的地
FileWriter fw = new FileWriter("d:\\a.txt");
// 使用FileWriter中的方法write,把数据写入到内存缓冲区中
fw.write("你好");
// 使用FileWriter中的方法flush,把内存缓冲区当中的数据,刷新到文件当中
fw.flush();
// 释放资源
fw.close();
}
结果如下:

注意:和字节输出流不同的是,如果我们不把内存缓冲区当中的数据刷新到文件中的话则不会显示出来我们写入的数据
示范(二)
public static void main(String[] args) throws IOException {
// 创建FileWriter对象,构造方法当中绑定要写入数据的目的地
FileWriter fw = new FileWriter("d:\\a.txt");
// 使用FileWriter中的方法write,把数据写入到内存缓冲区中
fw.write("啦啦啦");
// 释放资源
fw.close();
}
结果如下:

注意:如果我们写了close方法的话,我们就可以省略flush方法,因为close方法会自动帮我们把数据从内存缓冲区中刷新到文件当中再关闭有关占用的资源
三、flush方法和close方法都含有刷新的功能,那么他们的区别是什么?
flush方法和close方法的区别就是
- flush方法:将缓冲区中的数据刷新到文件当中后流对象依旧可以继续使用
- close方法:先将缓冲区中的数据刷新到文件中,然后通知系统释放有关资源,释放完毕后流对象无法继续使用
四、字符输出流写数据的一些其他方式
1、 void write(char[] cbuf) 写入字符数组
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("d:\\a.txt");
char[] chars = new char[]{'a', 'b','c'};
fw.write(chars);
fw.close();
}
得到的结果为

2、 abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("d:\\a.txt");
char[] chars = new char[]{'a', 'b','c'};
fw.write(chars, 1, 2);
fw.close();
}
得到的结果为:


浙公网安备 33010602011771号