java 21 - 2 字符输出流
字符输出流:OutputStreamWriter
构造方法:一共4个,说2个常用的
A:OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流(eclise默认的是GBK编码表)
B:OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
A:OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
1 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream( 2 "a.txt")); 3 out.write("中国是我们de祖国"); 4 5 out.close();
B:OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
1 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( 2 "osw.txt"), "UTF-8"); // 指定UTF-8 3 // 写数据 4 osw.write("中国是我们的祖国"); 5 6 // 释放资源 7 osw.close();
字符输出流的方法:
A* public void write(int c):写一个字符
B* public void write(char[] cbuf):写一个字符数组
C* public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
D* public void write(String str):写一个字符串
E* public void write(String str,int off,int len):写一个字符串的一部分
首先创建个字符输出流对象
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( "osw.txt"));
A* public void write(int c):写一个字符
osw.write('a');//看到的是a
osw.write(97);//这个看到的是W,因为这个是字符流,会根据编码表自动寻找值所对应的字符
B* public void write(char[] cbuf):写一个字符数组
1 char[] chs = {'a','b','c','d','e'}; 2 osw.write(chs);
C* public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
1 osw.write(chs,1,3);
D* public void write(String str):写一个字符串
osw.write("我爱睡觉");
E* public void write(String str,int off,int len):写一个字符串的一部分
osw.write("我爱睡觉", 2, 3);
注意:字符流有个跟字节流不同的类似xxx.close()的方法:xxx.flush();
那么,close()和flush()的区别呢:
A:close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。
B:flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。flush方法是当你想把BufferedOutStream中的数据立即输出时,就调用。
也就是说,close()只能在流的结尾使用,因为一使用了,流对象就没了
而,flush()可以在途中使用,因为它仅仅是刷新作用