From Gossip@Openhome

Java Gossip: FileReader、FileWriter

如果您想要存取的是一個文字檔案,您可以直接使用FileReader、FileWriter類別,它們分別繼承自InputStreamReader與 OutputStreamWriter,您可以直接指定檔案名稱或File物件來開啟指定的文字檔案,並讀入串流轉換後的字元,字元的轉換會根據系統預設 的編碼(若要指定編碼,則還是使用InputStreamReader與OutputStreamWriter)。

FileReader、FileWriter的使用非常簡單,直接舉個例子。在Linux下撰寫的文字檔案,其斷行字元是'\n',而在 Windows下撰寫的文字檔案其斷行是'\r'與'\n'兩個連續字元,如果您在Windows下使用記事本開啟一個Linux下撰寫的文字檔案,其在顯示上並不會有斷行的效果,且'\n'字元會被用一個黑色方塊來顯示。

我們在這邊撰寫一個簡單的程式,讀入Linux下撰寫的文字檔案,並寫入另一個檔案,在讀取到'\n'字元時,就取代為'\r'與'\n'兩個連續字元,如此新的檔案在Windows的記事本程式中,就可以有斷行顯示的效果。

  • FileReaderWriterDemo.java
package onlyfun.caterpillar;

import java.io.*;

public class FileReaderWriterDemo {
public static void main(String[] args) {
try {
FileReader fileReader =
new FileReader(args[0]);
FileWriter fileWriter =
new FileWriter(args[0] + ".txt");

int in = 0;
char[] wlnChar = {'\r', '\n'};
while((in = fileReader.read()) != -1) {
if(in == '\n')
fileWriter.write(wlnChar);
else
fileWriter.write(in);
}
fileReader.close();
fileWriter.close();
}
catch(ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}

}
}