字符流主要用於支持Unicode的文字內容,絕大多數在字節流中所提供的類,都可在此找到對應的類。其中,輸入流Reader抽象類幫助用戶在Unicode流內獲得字符數據,而Writer類則實現了輸出。可以利用Reader類是所有字符輸入流的父類,而Writer類所有字符輸出流的的父類。
Reader類和Writer類
以Reader和Writer為基礎派生的一系列類。Reader和Writer都是抽像類。只提供了一系列用於字符流處理的接口。
FileReader類和FileWriter類。
前面的FileInputStream使用字節讀取文件,字節流不能直接操作Unicode字符,所以java提供了字符流。
1.FileReader類
FileReader類於讀取文件,每次讀取文件中的第一個未讀取過的字符,並以ASCII碼或UTF-8碼的形式輸入到程序中。語法格式如下:
FileReader fr=new FileReader(filename)
其中文件名必須是文件完整的路徑和文件名,如果程序和該文件保存在同一目錄下,則可以只用文件名而不需要其路徑,FileReader類中的read()方法用來讀取字符並返回一個相應的int類型數據。當讀到文件的結尾處時,則返回值-1,在完成文件數據的讀取后需要使用close()方法關閉打開的文件。
代碼如下:
import java.io.*;
public class FileReadDemo {
public static void main(String []args)throws IOException{
//創建一個FileRead類型的對象
FileReader fr=new FileReader("student.txt");
int a=fr.read();//從文件中讀取字符並存入a中
while(a!=-1){//判斷文件內容是否結束
System.out.print((char)a);//輸出讀取的字符到控制台
a=fr.read();//讀取下一個字符
}
fr.close();//關閉文件 閱讀器
}
}
在這個程序中構建一個文件閱讀器FileReader的對象實例fr,通過while循環語句調用其read方法依次讀取字符,並判斷是否到了文件結束出。如果沒有到文件結尾,則將讀取的整數強制轉換為char類型,並輸出到控制台中,在程序最后,要關閉流。在聲明main()方法時,添加了throwsIOException用來處理輸出和輸入文件時發生的異常。當然,也可以使用try和catch語句來處理異常。但是如果不需要異常的具體處理方法,則可以只用throws關鍵字。
2:FileWriter類
FileWriter類用於將數據寫入文件語法格式如下:
FileWriter fr=new FileWriter(filename);
其中,文件名必須是文件的完整路徑和文件名,如果程序和該文件保存在同一目錄下,則可以只用文件名而不需要其他路徑。如果該文件名不存在,則系統會自動創建該文件。FileWriter類中的write()方法可以將文字或字符串寫入文件中。當完成數據寫入操作后,使用close()方法關閉文件。示例代碼如下:
import java.io.*;
public class FileWriter {
public static void main(String []args) throws IOException{
//創建一個FileWriter類型的對象
FileWriter fw=new FileWriter();
fw.write("thisismy");//像文件中寫入字符串
fw.write("stu");
fw.write("dent");
fw.write(".");//向文件中寫入字符
fw.write("txt");
fw.write("這個是我的文件。");
fe.close();
}
}
}
在這個程序中,構建了一個寫入器FileWriter對象實例fw,調用其write()方法向文本文件student.txt中寫入各種文本。在這個程序中,沒有代碼捕獲異常,而是在main()方法頭部使用throws關鍵字拋出IOException異常,將異常交給虛擬機處理。