IO流想必你們都很熟悉了,本次實現的需求是按行讀取文件內容而且按行寫入,代碼以下:app
1 try { 2 String encoding="utf-8"; //設定本身須要的字符編碼集 3 File file = new File("c:/text.txt"); 4 if(file.exists() && file.isFile()){ 5 InputStreamReader read = new InputStreamReader( 6 new FileInputStream(file), encoding);// 考慮到編碼格式 7 //FileReader read = new FileReader(file); //不考慮轉碼,可以使用FileReader; 8 BufferedReader br = new BufferedReader(read);//使用緩衝流按行讀取 9 String lineText = null; 10 StringBuffer sb = new StringBuffer(); 11 while((lineText=br.readLine()) !=null){ 12 System.out.println(lineText); 13 sb.append(lineText+"\n"); 14 } 15 br.close(); 16 read.close(); 17 FileWriter fw = new FileWriter("c:/t.txt"); 18 BufferedWriter bw = new BufferedWriter(fw); 19 bw.write(sb.toString()); 20 bw.close(); 21 fw.close(); 22 }else{
System.out.println("找不到指定的文件");
} 23 24 } catch (IOException e) { 25 // TODO Auto-generated catch block 26 e.printStackTrace(); 27 }
下面是我的對以上代碼的理解:函數
一、爲何用字符流 而不用字節流?編碼
文件讀取選擇字符流是由於文件是純文本,使用字符流能夠按行讀取,操做快,適合閱讀。spa
二、爲何用InputStreamReader 而不用FileReader?code
FileReader是InputStreamReader的子類,繼承了它的方法,則不一樣點在於構造函數,對象
InputStreamReader的構造函數參數爲 InputStream 和編碼方式,而FileReader的構造函數參數能夠file對象和String的path,當須要根據file和pahtblog
讀取文件時,選用FileReader。繼承
另記:在使用String類的split()方法時,按「|」 截取字符串的時候,並不能出現正常的結果,緣由是「|」 是轉義字符,utf-8
需加("\\|")。字符串