5-1 字节字符转换流
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流,按照编码处理
package com.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;public class IsrAndOswDemo {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\97386\\Desktop\\子查询.txt"),
"utf-8");// 默认项目编码 操作时要改成文件的编码
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\97386\\Desktop\\子查询2.txt"),
"utf-8");
// int c;
// while ((c = isr.read()) != -1) {
// System.out.print((char) c);
// }
char[] buffer = new char[8 * 1024];
int c;
// 批量读取,放入buffer这个字符数组,从第0个位置开始放,最多放buffer.length个,返回的是读到字符的个数
while ((c = isr.read(buffer, 0, buffer.length)) != -1) {
String s = new String(buffer, 0, c);
System.out.print(s);
osw.write(buffer, 0, c);
osw.flush();
}
isr.close();
osw.close();
}}
5-2 字符流之文件读写流
FileReader/FileWriter
package com.io;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class FrAndFwDemo {
public static void main(String[] args) throws IOException {
// 默认文件是该java项目编码
FileReader fr = new FileReader("C:\\Users\\97386\\Desktop\\子查询.txt");
FileWriter fw = new FileWriter("C:\\Users\\97386\\Desktop\\子查询2.txt"); // 可以添加第二个参数true,在文件后追加内容
char[] buffer = new char[2056];
int c;
while ((c = fr.read(buffer, 0, buffer.length)) != -1) {
fw.write(buffer, 0, c);
fw.flush();
}
fr.close();
fw.close();}
}
5-3 字符流的过滤器
BufferedReader --->readLine 一次读一行
BufferedWriter/PrintWriter --->写一行
package com.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 BrAndBwOrPwDemo {
public static void main(String[] args) throws IOException {
// 对文件进行读写操作
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream("C:\\Users\\97386\\Desktop\\子查询.txt"), "utf-8"));
/*BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("C:\\Users\\97386\\Desktop\\子查询2.txt")));*/
PrintWriter pw = new PrintWriter("C:\\Users\\97386\\Desktop\\子查询3.txt");
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // 一次读一行,并不能识别换行
/*bw.write(line);
// 单独写出换行操作
bw.newLine();
bw.flush();*/
pw.println(line);
pw.flush();
}
br.close();
// bw.close();
pw.close();}
}