字符输出流FileWriter
构造方法
| 构造方法 | 说明 |
|---|---|
| public FileWriter(File file) | 创建字符输出流关联本地文件 |
| public FileWriter(String pathname) | 创建字符输出流关联本地文件 |
| public FileWriter(File file, boolean append) | 创建字符输出流关联本地文件,续写 |
| public FileWriter(String pathname, boolean append) | 创建字符输出流关联本地文件,续写 |
成员方法
| 成员方法 | 说明 |
|---|---|
| void write(int c) | 写出一个字符(UTF-8) |
| void write(String str) | 写出一个字符串 |
| void write(String str, int off, int len) | 写出一个字符串的一部分 |
| void write(char[] cbuf) | 写出一个字符数组 |
| void write(char[] cbuf, int off, int len) | 写出字符数组的一部分 |
细节
- 创建字符输出流对象
- 参数是字符串表示的路径或者File对象都是可以的
- 如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
- 如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
- 写数据
- 如果write方法的参数是整数,实际上写到本地文件中的是整数在字符集上对应的字符
- 释放资源
- 每次使用完流后都要释放资源
底层原理
- 创建字符输出流对象
- 关联文件,并创建缓冲区(长度为8192的字节数组)
- 好处:减少了频繁到硬盘中读取数据的过程,提高效率
- 字节流没有缓冲区
- 写入数据
- 调用write方法时,是将字符写入缓冲区中,而并不是直接写入目标文件中
- 什么情况下缓冲区中的数据才能真正写入到目标文件中呢?
- 缓冲区装满了
- 注意装满了是指发现第8193个字节装不进缓冲区时,此时缓冲区中的数据才会写入到文件中
- 手动刷新
- flush方法
- 关流
- close方法
- 缓冲区装满了
| 成员方法 | 说明 |
|---|---|
| public void flush() | 将缓冲区中的数据,刷新到本地文件中 |
| public void close() | 释放资源/关流 |
- flush刷新:刷新之后,还可以继续往文件中写出数据
- close刷新:断开通道,无法再往文件中写出数据