字符流的用法和字节流对象非常相似,只是有一些细节不一样.
比如:
字节流读写操作以byte为单位,缓冲区是byte[]
字符流读写操作以char为单位,缓冲区是char[]
操作:复制test1.txt的内容到test2.txt
private static void copyFile() {
try(FileReader fileReader = new FileReader("E:/BaiduNetdiskDownload/test.txt");
FileWriter fileWriter = new FileWriter("E:/BaiduNetdiskDownload/test2.txt");
) {
char[] buffer = new char[1024];
int len = -1;
while((len = fileReader.read(buffer)) != -1) {
fileWriter.write(buffer, 0 , len);
}
}catch (IOException e ) {
}
}
使用Buffered…加快读写速度
private static void copyFile2() {
try(BufferedReader bufferedReader = new BufferedReader(new FileReader("E:/BaiduNetdiskDownload/test.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:/BaiduNetdiskDownload/test2.txt"))
) {
char[] buffer = new char[1024];
int len = -1;
while((len = bufferedReader.read()) != -1) {
bufferedWriter.write(buffer, 0 , len);
}
}catch (IOException e) {
e.printStackTrace();
}
}
但是带缓存区的字符流有一种特殊用法,可以按行读取.
private static void copyFile3() {
try(BufferedReader bufferedReader = new BufferedReader(new FileReader("E:/BaiduNetdiskDownload/test.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:/BaiduNetdiskDownload/test2.txt"))
) {
String line = "";
while((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
但是这样写复制的txt是没有换行的,我们需要在写入数据的时候手动添加换行符 \n
private static void copyFile3() {
try(BufferedReader bufferedReader = new BufferedReader(new FileReader("E:/BaiduNetdiskDownload/test.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("E:/BaiduNetdiskDownload/test2.txt"))
) {
String line = "";
while((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}