IO流详解——OutputStreamWriter转换流

163 阅读3分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

前言

大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍OutputStreamWriter转换流的基本概念和使用。

欢迎点击传送门了解更多IO流。

IO流详解——FileInputStream字节输入流

IO流详解——FileOutputStream字节输出流

IO流详解——FileReader字符输入流

IO流详解——FileWriter字符输出流

转换流

虽然我们已经解决了读写字符文件时产生乱码的现象,但是编码格式有很多种,如果我们不使用相同的编码方式来读写文件,同样会产生乱码的情况,这个时候我们就可以使用转换流来解决这种问题,通过使用指定的编码方式来读写文件。

今天我们就先来学习OutputStreamWriter转换流。

1.1 OutputStreamWriter

OutputStreamWriter也是字符输出流FileWriter的父类,是字符流通向字节流的桥梁(即将字符流转化为字节流)。如果没有指定具体的编码方式,则按照平台默认的编码方式把字符流按照该编码方式输出为字节流。

简单来说就是按照指定的编码方式写入文件。操作的对象是字符。

1.1.1 OutputStreamWriter的构造方法

OutputStreamWriter(OutputStream out) 
          创建使用默认字符编码的 OutputStreamWriter。 
OutputStreamWriter(OutputStream out, Charset cs) 
          创建使用给定字符集的 OutputStreamWriter。 
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 
          创建使用给定字符集编码器的 OutputStreamWriter。 
OutputStreamWriter(OutputStream out, String charsetName) 
          创建使用指定字符集的 OutputStreamWriter。 

【小结】 也就是说我们需要指定字符集或者字符编码,又或者是指定字符集编码器,否者就按照默认得到字符集编码来写入文件。

【实例展示】

  1. 使用默认编码方式
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(new File("D:1.txt"))); 
  1. 指定字符集
OutputStreamWriter osw1 = new OutputStreamWriter(new FileOutputStream(new File("D:1.txt")),"gbk");   

3.1.2 OutputStreamWriter的常用方法

下面是OutputStreamWriter的一些常用方法,可以结合实例理解。

 void close() 
          关闭此流,但要先刷新它。 
 void flush() 
          刷新该流的缓冲。 
 String getEncoding() 
          返回此流使用的字符编码的名称。 
 void write(char[] cbuf) 
          写入字符数组。 
 void write(char[] cbuf, int off, int len) 
          写入字符数组的某一部分。 
 void write(int c) 
          写入单个字符。 
 void write(String str, int off, int len) 
          写入字符串的某一部分。 
 void write(String str) 
          写入字符串。 
 Writer append(char c) 
          将指定字符添加到此 writer。 

之前说了FileWriter的方法都是继承而来,所以这里就不再分析flush和close方法了。当然结论还是一样,在调用了writer方法后,我们需要使用flush方法或close方法,把缓存区的数据强制写入到文件中。

【实例展示】

char[] c = {'a','b','c'};
​
//写入单个字符
osw.append("a");
osw.write('d');
//写入字符数组
osw.write(c);
//写入指定范围内的字符数组
osw.write(c,0,1);
//写入字符串
osw.write("abcd");
//写入指定字符串的一部分
osw.write("abcdefg",3,5);
​
osw.flush();
osw.close();

【小结】我们需要使用的方法无非就是write方法和close方法,我们可以通过具体的需求来选择对应的重载方法即可,需要注意的是不要忘记flush和close。

1.1.3 OutputStreamWriter小结

OutputStreamWriter使用步骤

  1. 创建OutputStreamWriter对象,参数是OutputStream对象 可以使用FileOutputStream类。
  2. 使用write方法写入缓存区
  3. 使用flush方法把缓存区数据写入文件
  4. 使用close方法释放流资源

小结

以上就是关于IO流中转换流的作用和OutputStreamWriter的具体使用以及需要重点关注的一些内容。希望对读者有所帮助,如有不正之处,欢迎留言指正。