java指定編碼的按行讀寫txt檔案(幾種讀寫方式的比較)
阿新 • • 發佈:2018-11-19
輸入輸出的幾種形式
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();