1. 程式人生 > >java指定編碼的按行讀寫txt檔案(幾種讀寫方式的比較)

java指定編碼的按行讀寫txt檔案(幾種讀寫方式的比較)

輸入輸出的幾種形式

1.FileReader,FileWriter

	File r = new File("temp.txt")
	FileReader f = new FileReader(name);//讀取檔案name
	BufferedReader b = new BufferedReader(f);//緩衝寫入,提供了readline函式,可以按行讀取。
	Srting str = null;
	while((str = b.readline()) != null){
			System.out.print(str);//按行讀取 
	}
	//但FileReader涉及編碼轉換問題,預設系統編碼,容易出現亂碼
     FileWriter writer = new FileWriter("c://test.txt");//FileWriter不會覆蓋原來的文字,並且能識別換行符。
     BufferedWriter bw = new BufferedWriter(writer);//緩衝寫入,提高寫入速度
     bw.write("已存在的字串");

2.inputStreamReader,outputStreamWriter

	File f = new File("//..//");
	InputStreamReader reader = new InputStreamReader(new
FileInputStream(f)); BuffeReader br = new BufferedWriter(reader); //FileReader是把檔案轉換為字元流讀入 //FileInputStream是讀取位元組流 //InputStreamReader將位元組轉換為字元,同時InputStreamReader的引數中可以自定義編碼,這是個重要的特性。 //OutputStreamWriter的用法同InputStreamReader,同樣可以使用者在其引數中自定義編碼方式,比較適合對中文文件的寫。

3.按行讀寫並指定編碼方式

	//按行讀中文文件,為了之後能按行寫,先將讀到的中文字串,放入陣列
List<String>temp = new ArrayList<>(); File f = new File("c://data.txt"); InputStreamReader reader = new InputStreamReader(new FileInputStream(f),"GBK"); BufferedReader br = new BufferedReader(reader); String str=null; while((str=br.readline())!=null){ temp.append(str); } br.close(); reader.close(); //下面按行讀。我實現的其實就是變相的分行列印,如果有更好的方法請大家指教 OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("out.txt"),"GBK"); BufferedWriter bw = new BufferedWriter(os); PrintWriter out = new PrintWriter(bw); for(String aTemp:temp){ out.println(aTemp); } bw.close(); os.close(); out.close();