字符流
1)编码问题
2)认识文本 文件 文本文件
文本(char):是16位无符号的整数,是字符的unicode编码(双字节编码)
文件:文件时byte byte byte....的数据序列
文本文件:是文本(char)序列按照某种的编码方案序列化byte byte byae的存储数据序列
3)字符流分为输出流(Writer)和输入流(Reader)
字符的处理:一次处理一个字符,字符的底层依然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter提供char流到byte流,按照编码处理
package com.tudou.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Reader {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream in = new FileInputStream("D:\\eclipse\\1.txt");
InputStreamReader isr = new InputStreamReader(in,"gbk");
FileOutputStream out = new FileOutputStream("D:\\eclipse\\2.txt");
OutputStreamWriter osw = new OutputStreamWriter(out,"gbk");
int c;
int i=1;
// while((c=isr.read())!=-1){
// System.out.print((char)c+" ");
//
// if(i++%10==0){
// System.out.println();
// }
// }
//批量读取,放入buffer这个字符数组,从第0个位置开始放置
//最多放置buffer.length个返回的是读到的字符的个数
char[] buffer = new char[8*1024];
while((c=isr.read(buffer,0,buffer.length))!=-1){
String s = new String(buffer,0,c);
System.out.println(s);
osw.write(buffer,0,c);
osw.flush();
}
in.close();
isr.close();
out.close();
osw.close();
}
}
FileReader/FilePrinter
package com.tudou.io;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileRP {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileReader fr = new FileReader("D:\\eclipse\\1.txt");
FileWriter fw = new FileWriter("D:\\eclipse\\3.txt",true);//追加内容true
char[] buffer = new char[2*1024];
int c;
while((c=fr.read(buffer,0,buffer.length))!=-1){
fw.write(buffer,0,c);
fw.flush();
}
fr.close();
fw.close();
}
}
字符流的过滤器
BufferedReader------->readLine一次读一行
BufferedWriter/PrintWriter----->写一行
package com.tudou.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class BufferedRW {
//对文件进行读写操作
public static void main(String[] args)throws IOException{
FileInputStream in = new FileInputStream("d:\\eclipse\\1.txt");
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter
// ( new FileOutputStream("d:\\eclipse\\5.txt")));
PrintWriter pw = new PrintWriter("d:\\eclipse\\6.txt");
String line;
while((line=br.readLine())!=null){
System.out.print(line);//一次读一行并不能识别换行符
// bw.write(line);
// bw.newLine();//换行操作
// bw.flush();
pw.print(line);
pw.flush();
}
br.close();
pw.close();
}
}