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
需加("\\|")。字符串