2005-02-05 14:28 作者: mingjava 出處: j2me開發網責任編輯:方舟
最初java是不支持對文本文件的處理的,爲了彌補這個缺憾而引入了Reader和Writer兩個類,這兩個類都是抽象類,Writer中write(char[] ch,int off,int length),flush()和close()方法爲抽象方法,Reader中read(char[] ch,int off,int length)和close()方法是抽象方法。子類應該分別實現他們。
當我們讀寫文本文件的時候,採用Reader是非常方便的,比如FileReader,InputStreamReader和BufferedReader。其中最重要的類是InputStreamReader,它是字節轉換爲字符的橋樑。你可以在構造器重指定編碼的方式,如果不指定的話將採用底層操作系統的默認編碼方式,例如GBK等。當使用FileReader讀取文件的時候。
FileReader fr = new FileReader("ming.txt"); int ch = 0; while((ch = fr.read())!=-1 ) { System.out.print((char)ch); }
|
其中read()方法返回的是讀取得下個字符。當然你也可以使用read(char[] ch,int off,int length)這和處理二進制文件的時候類似,不多說了。如果使用InputStreamReader來讀取文件的時候
while((ch = isr.read())!=-1) { System.out.print((char)ch); }
|
這和FileReader並沒有什麼區別,事實上在FileReader中的方法都是從InputStreamReader中繼承過來的。read()方法是比較好費時間的,如果爲了提高效率我們可以使用BufferedReader對Reader進行包裝,這樣可以提高讀取得速度,我們可以一行一行的讀取文本,使用readLine()方法。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt"))); String data = null; while((data = br.readLine())!=null) { System.out.println(data); }
|
當你明白瞭如何用Reader來讀取文本文件的時候那麼用Writer寫文件同樣非常簡單。有一點需要注意,當你寫文件的時候,爲了提高效率,寫入的數據會先放入緩衝區,然後寫入文件。因此有時候你需要主動調用flush()方法。與上面對應的寫文件的方法爲:
FileWriter fw = new FileWriter("hello.txt"); String s = "hello world"; fw.write(s,0,s.length()); fw.flush();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt")); osw.write(s,0,s.length()); osw.flush();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true); pw.println(s);
|
不要忘記用完後關閉流!下面是個小例子,幫助新手理解。其實有的時候java的IO系統是需要我們多記記的,不然哪天就生疏了。
hello world i like java language
import java.io.*;
public class TestFile2 { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("ming.txt"); char[] buffer = new char[1024]; int ch = 0; while((ch = fr.read())!=-1 ) { System.out.print((char)ch); }
InputStreamReader isr = new InputStreamReader(new FileInputStream("ming.txt")); while((ch = isr.read())!=-1) { System.out.print((char)ch); }
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt"))); String data = null; while((data = br.readLine())!=null) { System.out.println(data); }
FileWriter fw = new FileWriter("hello.txt"); String s = "hello world"; fw.write(s,0,s.length()); fw.flush();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("hello2.txt")); osw.write(s,0,s.length()); osw.flush();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("hello3.txt")),true); pw.println(s);
fr.close(); isr.close(); br.close(); fw.close(); osw.close(); pw.close(); } }
|
<script> var ad_cid; if (window.location.search.substring(1) != "") { ad_cid = window.location.search.substring(1); } else { ad_cid = 412; } </script>
|