缓冲字符流和缓冲字节流差不多
注意一下写程序的时候区分开两个"管道"就行
还有一个问题,再利用缓冲数组写入文件的时候,不一定用for遍历数组
可以直接用write(arr,0.len-1)吧数组全部写入
或者是直接把数组变成字符串 new String(arr)
package com.Ioliu;
//关于缓冲字符流,几乎是没啥变化
// 只要是区分开字符(reader write)和字节流(Inputstream Outputstream)四个抽象基类就行了;
import java.io.*;
public class I0_buffered_char {
public static void main(String[] args) throws IOException {
//按照缓冲字节流,似乎和之前那个没啥区别;
BufferedReader br=new BufferedReader(new FileReader("D:\\data.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\demo.txt",true));
//这是一个推车复制
/*char[] arr=new char[2048];
int len=br.read(arr);
while(len!=-1){
for(int i=0;i<len;i++){
bw.write(arr[i]);
}
len=br.read(arr);
}*/
//还有一个之前用过的按行复制的方法
String str=br.readLine();
while(str!=null){
bw.write(str);
bw.newLine();//每次复制完一行的内容以后重新分出一行
str=br.readLine();
}
bw.close();
br.close();
}
}
关于转换流
package com.Ioliu;
//InputStream outputstream 本质上是字符流,起到转换作用,因此也被称之为转换流
//记住这个顺序,一般变成字符流更快一点
//Inputstream 起到的作用是字节在进入程序之前变成字符
//OutputStream起到的作用是字符在离开程序之时重新变成字节
import java.io.*;
import java.nio.charset.StandardCharsets;
public class Io_type_char {
public static void main(String[] args) throws IOException {
File f1=new File("D:\\data.txt");
File f2=new File("D:\\dio.txt");
//先搭建字节流
FileInputStream a1=new FileInputStream(f1);
FileOutputStream a2=new FileOutputStream(f2);
//搭建一下转换流
//字符-------->字节,在转化的时候要指明字符的编码类型(不知名编码类型的话就会默认程序的编码)
InputStreamReader b1=new InputStreamReader(a1, StandardCharsets.UTF_8);
//字节-------->字符
OutputStreamWriter b2=new OutputStreamWriter(a2,StandardCharsets.UTF_8);
//数组尚且是在内部进行搬运的,内部已经转化为字符流,所以用字符数组进行搬运
char[] arr=new char[5];
int n=b1.read(arr);
while(n!=-1){
//==这里可以直接把数组写进去,谈后再写上实际有效长度,省的再利用for进行写入
b2.write(arr,0,n-1);
n=b1.read(arr);
}
//效果上似乎没本质的区别
//一样的,对这个处理流进行操作和关闭就可以了
b2.close();
b1.close();
}
}