字符流=字节流+编码表
字符流:字节流操作的都是字节,希望程序中操作字符,于是JDK提供了用于实现字符操作的字符流
- 用字节流复制文件时,文本文件中也会有中文,但是没有问题,因为最终底层操作会自动进行字节拼接成中文,如何识别中文:
汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数
一、字符流写数据
FileReader和FileWriter
字符流写数据:
FileWriter osw = new FileWriter("D:\\wokspace1\\firstwork\\osw.txt");
写入一个字符
osw.write(97);
osw.flush();
char [] chs = {
'a','b','c'};
osw.write(chs);
osw.write(chs,0,chs.length);
osw.write("abcdef");
osw.write("abcdef",1,3);
osw.close();
二、字符流读数据
字符流读数据:
FileReader isr = new FileReader("D:\\wokspace1\\firstwork\\osw.txt");
int read(): 一次读一个字符数据
int ch;
while((ch=isr.read())!=-1) {
System.out.println((char)ch);
}
int read(char[] cbuf): 一次读一个字符数组数据
char[] chs = new char [1024];
int len=0;
while((len=isr.read(chs))!=-1) {
System.out.println(new String(chs,0,len));
}
三、字符缓冲流
字符缓冲流:
BufferedReader br = new BufferedReader(new FileReader("D:\\wokspace1\\firstwork\\osw.txt"));
char[] chs = new char[1024];
int len=0;
while((len=br.read(chs))!=-1) {
System.out.println(new String(chs,0,len));
}
四、字符缓冲流特有功能
BufferedWriter:
newLine():写一行行分隔符(换行),行分隔符字符串由系统属性定义
readLine():读一行文字
五、字符缓冲流复制文件
字符缓冲流来复制文件:
BufferedReader br = new BufferedReader(new FileReader("D:\\wokspace1\\firstwork\\bos.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\wokspace1\\firstwork\\osw.txt"));
String line;
while((line=br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();