1. 程式人生 > >java讀取文件:文本文件

java讀取文件:文本文件

一個 throw str red mod rac logs exc lose

  一般使用串行方式讀出或者寫入文件。總的來說,使用輸入流把文件內容讀入內存,使用輸出流把內存中的信息寫出到文件。這些類位於java.io包下。
輸入和輸出的類和方法往往是對應的

文本文件

先了解如何讀寫文本文件,然後看如何讀寫二進制文件。jaVa.ioReader用來讀取字符,它的子類FileReader用來讀取文本文件。
FileReader打開指定路徑下的文件。文件的路徑分隔符可以用“\\”或者“/”表示。

“\\”是Windows風格的寫法,因為字符串中的特殊字符要轉義,所以用兩個斜線表示一個斜線。

FileReader fr = new
FileReader ("c: Wautoexec.bat"); //打幵文本文件

“/”是Linux風格的路徑寫法,因為不需要轉義,所以正斜線只需要寫一個就可以了。

FileReader fr = new FileReader ("c:/autoexec.bat"); //打開文本文件

如果有一堆磚要搬,一次取不完,不會一次只拿一塊磚,會盡量多拿幾塊。如果有很多內
容要讀,不會一次只讀一個字節,而是一次盡量多讀一些字節到緩存。

FileReader fr = new FileReader ("c:/autoexec.bat"); //打開文本文件

 BufferedReader br = new BufferedReader (fr); //緩存讀

 String line;
while ((line = br .readLine ()) != null) { //按行讀入文件
System.out.println(line);
}
fr.close(); //關閉文本文件

輸入流把數據從硬盤讀入隨機訪問存儲器(Random Access Memory,簡稱RAM)。可以
根據輸入流構建BufferedReader,實現代碼如下所示。

String fileName = "SDIC.txt"; //文件名
InputStream file = new FilelnputStream (new File (fileName)); //
打開輸入流 //緩存讀入數據 BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK"));

for循環按行讀入一個文件

String fileName = "SDIC.txt"; //文件名
InputStream file = new FilelnputStream (new File (fileName));"打開輸入流
//緩存讀入數據
BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK"));
String line = in.readLine();
while (line != null) {
System.out.println (line);
line = in.readLine();
}
in.close ();

一般來說,Writer是把內容立即寫到硬盤。如果要多次調用write方法,則批量寫入效率會
更高。類似於團購,團購的價格往往比單件購買的價格低。可以使用緩存加快文件寫入速度。

//使用缺省的緩存大小
BufferedWriter bw - new BufferedWriter(new FileWriter(fileName));
bw.write (”Hello,China!"); //寫入一個字符串
bw.write (”\n”); //寫入換行符
bw.write("Hello,World!");
bw.close(); //把緩存中的內容寫入文件

使用BufferedWriter寫入數據時,最後需要調用BufferedWriter的close方法。如果不關閉
文件,可能導致緩存中的數據丟失,寫入文件的數據不完整。

按指定編碼寫入文本的完整代碼如下所示。

/*
     * 向文件寫入字符串
     * 
     * @param content 字符串
     * 
     * @param fileName 文件名
     * 
     * @param encoding 編碼
     */
    public static void writeToFile(String content, String fileName,
            String encoding) {
        try {
            FileOutputStream fos = new File0utputStream(fileName);
            OutputStreamWriter osw = new OutputStreamWriter(fos, encoding);
            BufferedWriter bw = new BufferedWriter(osw);
            bw.write(content);
            bw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        }

    }

如果黑板上已經有字,可以選擇抹去黑板上已有的字重新寫,也可以在原來的文字後繼續
寫。如果一個文件已經存在,可以把新的內容追加寫到最後,也可以從頭寫入新內容,也就是
覆蓋寫。FileWriter的構造方法區別於這兩種寫入方式。

//FileWriter 構造方法 .
FileWriter( String fileName, boolean mode) throws IOException

其中的mode = false表示覆蓋寫,mode = true表示追加寫。為了避免沖突,在一個時刻只
能有一個線程寫文件。

java讀取文件:文本文件