字符流的前提知识:
1、编码方式
2、认识文本和文本文件:
Java的文本(char)是16位无符号整数,是字符的Unicode编码(双字节编码)
文件是byte byte byte … 的数据序列
文本文件是文本(char)序列按照某种方式编码方式(utf-8,utf-16be,gbk)序列化为byte的存储结果
3、字符流(reader:输入流的抽象类;writer:输出流的抽象类) ------->操作文本文件
字符的处理:一次处理一个字符,底层仍然是基本的字节序列
字符流的基本实现:
InputStreamReader:完成byte流解析到char流,按照编码解析
OutputStreamWriter:提供char流到byte流,按照编码解析
public static void outByStream(File file) throws IOException {
FileInputStream in = new FileInputStream(file);
InputStreamReader iReader = new InputStreamReader(in);
int c;
while((c = iReader.read())!=-1) {
System.out.print((char)c);
}
}
FileReader/FileWriter
public static void fileRW(File file) throws IOException{
FileReader fileReader = new FileReader(file);
//FileReader fileReader2 = new FileReader("e:\\score.txt");
FileWriter fileWriter = new FileWriter("e:\\1.txt");
char[] buffer = new char[2056];
int c;
while((c = fileReader.read(buffer,0,buffer.length))!=-1) {
fileWriter.write(buffer,0,c);
fileWriter.flush();
}
fileReader.close();
fileWriter.close();
}
字符流的过滤器:
BufferedRead------>readLine 一次读一行
BufferedWrite------>writeLine 一次写一行
public static void bufferedRandW(File file) throws IOException{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e:\\3.txt")));
String line;
while((line = bufferedReader.readLine())!=null) {
System.out.print(line);//一次读一行,不能识别换行
bufferedWriter.write(line);
//单独写出换行操作
bufferedWriter.newLine();
bufferedWriter.flush();
}
bufferedReader.close();
bufferedWriter.close();
}