黑马程序员_<<字符流的缓冲技术和装饰类(BufferedWriter,BufferedReader,LineNumberReader)>>
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
BufferedWriter是利用的缓冲技术,操作的是输入流,把Writer对象构造函数的参数传入,首先是把信息读取到缓冲流中,然后再刷新缓冲流,把读到的文件信息传到目的地。这提高了写入的效率。
这里写入的方法增加了newLine()方法,换行,这个是跨平台的操作,不用在写”\r\n”,当关闭缓冲流,同时也关闭了缓冲流中封装的输入字符流。
缓冲区都有自己默认的长度,也可以自己设定长度,一般情况下,默认长度据够用了
其实这是装饰类,用了装饰设计模式,详细参考 黑马程序员_<<装饰设计模式>>
模拟换行
import java.io.BufferedReader;import java.io.IOException;import java.io.LineNumberReader;import java.io.Reader;/*自定义的可以设置行号读取类*/public class MyLineNumberReader extends BufferedReader { private Reader r;// 读取流字符流 private int LineNumber;// 行号 public MyLineNumberReader(Reader r) { super(r);// 父类的构造方法 } public int getLineNumber() { return LineNumber; } public void setLineNumber(int lineNumber) { LineNumber = lineNumber; } public String readLine() throws IOException { this.LineNumber++;// 每读取一行,行号就增加 return super.readLine(); } public void close() throws IOException { super.close(); } } import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.LineNumberReader; public class LineNumberDemo { public static void main(String[] args) { MyLineNumberReader lnr = null; try { lnr = new MyLineNumberReader(new FileReader("F:\\ClassDemo.java")); String line = null; //lnr.setLineNumber(10);//在这里也可以自己设置行号的开始 默认的是从1开始 while ((line = lnr.readLine()) != null) { System.out.println(lnr.getLineNumber()+":"+line); } } catch (FileNotFoundException e) { System.out.println("没有找到指定的文件"); } catch (IOExceptione) { System.out.println("读取失败"); } finally { if (lnr != null) { try { lnr.close(); } catch (IOException e) { System.out.println("流关闭失败"); } } } } } 部分结果:1:package www.fuxi.IO;2:3:importjava.io.FileNotFoundException;4:import java.io.FileReader;5:import java.io.IOException;6:7:public class ClassDemo {8: public static void main(String[]args) {
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------