4、实例演示:
package com.chy.io.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutputStreamWriterTest {
private final static String str = "威尔杰克逊";
public static void testOutputStreamWriterTest()throws IOException{
File file = new File("D:" + File.separator + "osw.txt");
//设置文件内容可追加
FileOutputStream fos = new FileOutputStream(file, true);
OutputStreamWriter oswDefault = new OutputStreamWriter(fos);
BufferedWriter bwDefault = new BufferedWriter(oswDefault);
//第一个“威尔杰克逊”
bwDefault.write(str);
bwDefault.newLine();
System.out.println("oswDefault encoding: " + oswDefault.getEncoding());
OutputStreamWriter oswGBK = new OutputStreamWriter(fos, "GBK");
BufferedWriter bwGBK = new BufferedWriter(oswGBK);
//第二个“威尔杰克逊”
bwGBK.write(str);
bwGBK.newLine();
System.out.println("bwGBK encoding: " + oswGBK.getEncoding());
OutputStreamWriter oswUTF8 = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bwUTF8 = new BufferedWriter(oswUTF8);
//第三个“威尔杰克逊”
bwUTF8.write(str);
bwUTF8.newLine();
System.out.println("bwGBK encoding: " + oswUTF8.getEncoding());
/**关闭流、释放资源
* 自己可以尝试分析为什么不能写成下面这种形式?
*
bwDefault.flush();
bwDefault.close();
bwGBK.flush();
bwGBK.close();
bwUTF8.flush();
bwUTF8.close();
fos.flush();
fos.close();
*/
/**关闭流、释放资源*/
bwDefault.flush();
bwGBK.flush();
bwUTF8.flush();
bwDefault.close();
bwGBK.close();
bwUTF8.close();
}
public static void main(String[] args) throws IOException{
testOutputStreamWriterTest();
}
}
二:InputStreamReader
1、类功能简介:
输出字符转换流、是输出字节流通向输出字符流的桥梁、用于将字节输出流转换成字符输出流、也就是完成将要写入的字符使用特定的编码转码成字节、再将转换后的字节写入到底层字节输出流中。可以指定编码。本质是OutputStreamWriter内部的一个类:StreamEncoder、这个类来完成上面所有的工作、是这个类使用指定的或者默认的编码来将要写入的字符转码成字节、然后调用StreamEncoder的方法来将转码后的字节写入到底层流中OutputStreamWriter中所有的方法都是调用StreamEncoder来实现的、OutputStreamWriter只是对StreamEncoder进行了封装、什么都没有做、
2、InputStreamReader API简介:
A:关键字
private final StreamDecoder sd; 核心类、用于将字节解码成字符
B:构造方法
InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。 InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。 InputStreamReader(InputStream in, Charset cs) 创建使用给定字符集的 InputStreamReader。 InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader。
C:一般方法
String getEncoding() 返回此流使用的字符编码的名称。 int read() 读取单个字符。 int read(char cbuf[], int offset, int length) 将字符读入数组中的某一部分。 boolean ready() 判断此流是否已经准备好用于读取。 void close() 关闭该流并释放与之关联的所有资源。
3、源码分析
package com.chy.io.original.code; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; /** * 字符输入流、是连接字节流与字符流之间的桥梁。将读取的字节转换成字符、编码可以使用系统默认的也可以使用指定的。 * 为提