Java还提供了字符流,用于操作字符。与字节流相似,字符流也有两个抽象基类,分别是Reader和Writer。Reader是字符输入流,用于从目标文件读取字符;Writer是字符输出流,用于向目标文件写入字符。
其中FileReader和FileWriter是两个很常用的子类,FileReader类用来从文件中读取字符,操作文件的字符输入流。
接下来用一个案例来说明:
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class TestFileReader {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
File file=new File("read.txt");
FileReader fr=new FileReader(file);
int len; //定义len,记录读取的字符
//判断是否读取到文件的末尾
while((len=fr.read())!=-1) {
//打印内容
System.out.print((char)len);
}
fr.close();
}
}
运行结果:
与FileReader类对应的FileWriter类,它用来将字符写入文件,操作文件字符输出流的。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class TestFileWriter {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
File file=new File("read.txt");
FileWriter fw=new FileWriter(file);
fw.write("Hello World!!!");
System.out.println("已保存到read.txt!");
fw.close();
}
}
字符流的缓冲区
字符流中缓冲区的流分别是BufferedReader类和BufferedWriter类,其中BufferedReader类用于对字符输入流进行包装,BufferedWriter类用于对字符输出流进行包装,包装后会提高字符流的读写效率。
接下来通过一个案例来演示缓冲区。
首先创建一个src.txt文件,文件内容为
Hello World!!!
I am computer student
I love computer
然后开始编写代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestCopyBuffered {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
FileReader fr=new FileReader("src.txt");
FileWriter fw=new FileWriter("tar.txt");
BufferedReader br=new BufferedReader(fr);
BufferedWriter bw=new BufferedWriter(fw);
String str;
//每次读取一行文本,判断是否到文件末尾
while((str=br.readLine())!=null) {
fw.write(str);
//写入一个换行符,该方法会根据不同操作系统生成对应的换行符
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
}