前言
1. 编码问题
2. 认识文本和文本文件
java 的文本 char 是 16 位无符号整数,是字符的 Unicode 编码(utf-16be);
文件是 byte byte byte ... 的数据序列;
文本文件是文本(char)序列按照某种编码方案(utf-8、utf-16be、gbk)序列化为byte的存储结果;
3. 字符流(Reader Writer) ---> 操作的一般是文本文件
字符的处理,一次处理一个字符;
字符的底层仍然是基本的字节序列;
4. 字符流的基本实现:
ImportStreamReader 完成byte流解析为char流,按照编码解析;
OutputStreamWriter 提供char流到byte流,按照编码处理;
一、InputStreamReader & OutputStreamWriter 类
字符流的基本实现: ImportStreamReader 完成 byte 流解析为 char 流,按照编码解析; OutputStreamWriter 提供 char 流到 byte 流,按照编码处理;
// 默认项目的编码,要写文件本身的编码格式
InputStreamReader isr = new InputStreamReader(
new FileInputStream("D:\\Test\\file\\test\\test.txt")
,"utf-8"
);
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("D:\\Test\\file\\test\\copy.txt")
,"utf-8"
);
char[] buf = new char[10 * 1024];
int c;
while((c = isr.read(buf, 0, buf.length)) != -1) {
for(int i=0; i<c; i++) {
String s = new String(buf, 0, c);
System.out.print(s);
osw.write(s);
osw.flush();
}
}
isr.close();
osw.close();
二、FileReader & FileWriter 类
注意:这两个类不能指定文件编码,使用的是项目的编码。
FileReader fr = new FileReader("D:\\Test\\file\\test\\test.txt");
// 往已有文件内追加内容,需要增加第二个参数 true
FileWriter fw = new FileWriter("D:\\Test\\file\\test\\copy.txt");
char[] buf = new char[10 * 1024];
int c;
while ((c = fr.read(buf, 0, buf.length)) != -1) {
fw.write(buf, 0, c);
fw.flush();
}
fr.close();
fw.close();
三、BufferedReader & BufferedWriter/PrintWriter 类
// 对文件进行读写操作
BufferedReader br = new BufferedReader(
new InputStreamReader(
new FileInputStream("D:\\Test\\file\\test\\test.txt")
,"utf-8"
)
);
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("D:\\Test\\file\\test\\copy1.txt")
,"utf-8"
)
);
PrintWriter pw = new PrintWriter(
new OutputStreamWriter(
new FileOutputStream("D:\\Test\\file\\test\\copy2.txt")
,"utf-8"
)
);
String s;
while ((s = br.readLine()) != null) {
// 一次读一行,并不能识别换行
System.out.println(s);
// 单独写出换行
bw.write(s);
bw.newLine();
bw.flush();
pw.println(s);
pw.flush();
}
br.close();
bw.close();
pw.close();
最后修改:2019-09-08 01:20:11
© 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

发表评论