字符流/转换流:由于字节流操作中文不方便,所以出现了。
总共有以下方法:
1、InputStreamReader、OutputStreamWriter
2、FileReader、FileWriter
3、BufferedReader BufferedWriter的普通方法
4、BufferedReader BufferedWriter的特殊方法
字符流=字节流+编码表
编码的方法:
byte[] getBytes(String charsetName):使用指定的字符集合把字符编码成字节数组 String→byte[]
解码的方法:
String(byte[] bytes,String charsetName):通过指定的字符集解码字节数组 byte[]→String
代码:
public static void main(String[] args) {
String s = "你好"; 编码
byte[] by = s.getBytes("UTF-8"); 默认为GBK
System.out.println(Arrays.toString(by));
String ss = new String (by,"UTF-8"); 解码
System.out.println(ss);
}
字符输入流
方法:
int read():一次读取一个字符
int read(char[] chs):一个读取一个字符数组
代码
package cn.idcast3; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; public class Day902 { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(new FileInputStream( "osw.txt")); int ch = 0; while ((ch = isr.read()) != -1) { System.out.print((char) ch); } isr.close(); } }
字符输出流
方法:
public void write(int ch):一次写一个字符
public void write(char[] cbuf,int off,int len):一次写一个字符数组的一部分
package cn.idcast3; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; public class Day9 { public static void main(String[] args) throws IOException { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( "c.txt")); osw.write("中国"); osw.close(); } }
字符输入流和字符输出流都可以简写
字符输入流简化为:FileReader
字符输出流简化为:FileWriter
所以代码可以写成
FileReader:
package cn.idcast3; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Day903 { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("a.txt"); int ch =0; while((ch=fr.read())!=-1) { System.out.print((char) ch); } fr.close(); } }
FileWriter:
package cn.idcast3; import java.io.FileWriter; import java.io.IOException; public class Day904 { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("a.txt"); fw.write("中国"); fw.close(); } }
高效字符流/字符缓冲流
BufferedReader:高效字符缓冲输入流
BufferedWriter:高效字符缓冲输出流
代码换成
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
其他和InputSteamReader一样,同理 BufferedWriter也是
字符缓冲流的特殊方法
BufferedReader
public String readLine():一次读取一行数据,没有就返回null
BufferedWriter
public void new Line():根据系统决定换行符
flush():刷新缓冲区
close()和flush()的区别:
close():关闭流对象,但是要先刷新,关闭以后流就不能使用了
flush():刷新缓冲区,流对象还能使用
字符缓冲流特殊方法的代码
package cn.idcast3; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Day905 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("d.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("e.txt")); String line = null; while((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } br.close(); bw.close(); } }