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();
}
}