原理图:

 

 

 

注意:

   

FileReader

1.其实所有的底层都是FileInputStream来读的,先读取到字节 再FileReader(这个时候用的UTF-8来解码的来read的)把字节转换为字符(相当于解码)

但是如果存储的是GBK格式,则FileInputStream读取的字节时Gbk格式 但是FileReader仍然用UTF-8来,则会产生乱码(编码和解码不对应,会乱码所以FileReader只能读取ide默认格式编码的文件)

不用FileReader读了用InputStreamReader来读既可以查询默认的UTF-8又可以查询指定的码表比如GBK或者其他的

2.FileWriter

只能查询Ide的默认码表,吧字符转换为字节(编码把看懂的转换成看不懂的)还是会用到FileOutputStream依次把字节写入到硬盘中(只能写Utf-8)

如果要写GBK格式的文件

用OutputStreamWriter 既可以把字符转化为默认的又可以转化为指定的码表 ,然后FileOutputStream写入到硬盘中(注意FileOutputStream只能写UTF-8)

 

 

OutputStreamwriter介绍和代码实现

继承来自父类的共性成员方法  

  void writer(int c)写入单个字符

  void writer(char[] cbuf)写入字符数组

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

  void writer(String str)写入字符串

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

  void flush()刷新该流的缓存

  void cloes()关闭次流,但先要刷新它

构造方法:
  OutputStreamWriter(OutputStream out)创建使用默认字符编码的 OutputStreamWriter

  OutputStreamWriter(OutputStream out,String charsetName)创建使用指定字符集的OutputStreamWriter

参数:

  OutputStreamWriter out: 字节输出流,可以用来写转换之后的字节到文件中

  String charsetName:指定的编码表名称,不区分大小写,可以是utf-8/UTF-8,gbk/GBK,...不指定默认使用UTF-8

使用步骤:

  1.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称

  2.使用OutputStreamWriter对象中的方法write,把字符转化为字节存储缓冲区中(编码)

  3.使用OutputStreaamWriter对象中的方法flush,把内存缓冲区中的字节刷新到文件中(使用字节流写字节的过程)

  4.释放资源

 

代码实现

 

 

 

 

 

posted on 2022-07-18 10:06  淤泥不染  阅读(95)  评论(0编辑  收藏  举报