Java FileWriter

182 阅读2分钟

字符输出流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刷新:断开通道,无法再往文件中写出数据