天天看點

使用Java操作文本檔案

  使用Java操作二進制檔案一文中講述了如何使用Java處理二進制的檔案,這篇文章主要講述如何使用java處理文本檔案。

    最初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系統是需要我們多記記的,不然哪天就生疏了。測試檔案的内容為

ming.txt

歡迎光臨J2ME開發網12345

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

 } 

}