《黑马程序员》 装饰类-自定义BufferedReader和LineNumberReader
来源:互联网 发布:简易购物网站源码 编辑:程序博客网 时间:2024/05/17 22:50
class MyBufferedReader extends Reader{//要覆盖父类中的抽象方法private Reader r;public MyBufferedReader(Reader r){this.r=r;}//对功能增强public String myReadLine() throws IOException {StringBuilder sb=new StringBuilder();int len; //记录读取到的字符 while((len=r.read())!=-1){if(len=='\r')continue;if(len=='\n'){ //如果到了换行符//返回内容return sb.toString();}elsesb.append((char)len);}if(sb.length()>0){return sb.toString();}return null;}//接口中是实现,子父类中覆盖public void close() throws IOException{ //父类中的是抽象的我们子类来实现r.close(); }public int read(char[] cbuf, int off, int len) throws IOException{return r.read(cbuf,off,len); // 我们自己来实现}}import java.io.*;class MyLineNumberReaderDemo{public static void main(String[] args) {MyLineNumberReader mnr=null; try{mnr=new MyLineNumberReader(new FileReader(new File("d:\\temp.txt")));String str;while((str=mnr.myReadLine())!=null){//我们来测试一下行号的功能System.out.println(mnr.getLineNumber()+">>:"+str);} }catch(Exception e){e.printStackTrace(); }finally{try{if(mnr!=null){mnr.close();}}catch(Exception e){e.printStackTrace();} }}}class MyLineNumberReader extends MyBufferedReader{ //自定义的LineNumberReaderprivate int lineNumber; //有行号说明它有私有的成员变量是记录用户的行号public MyLineNumberReader(Reader r){//this.r=r;//调用父类中的构造方法super(r); //父类中有参的构造}public void setLineNumber(int lineNumber){ //设置和获取行号的方法this.lineNumber=lineNumber;}public int getLineNumber() { //行号是在什么时候自增了? //是在读取一行之后return this.lineNumber; //获取行号} public String myReadLine() throws IOException{ //自定义的读取一行的方法this.lineNumber++; //读取一行,即调用了该方法,让行号自增//下面的功能和父类是一样的。我们就不自己写了。我们直接调用父类的就可以了return super.myReadLine(); //直接返回父类的方法的调用的结果}}//class MyLineNumberReader extends MyBufferedReader{ //自定义的LineNumberReader////我们发现里面有些功能是和BufferedReader的功能是一样的////所以我们可以继承我们自定义的MyBufferedReader然后去除重复的功能。//// //提高扩展性。只要是Reader的子类对象都是可以进行包装的// //我们需要覆盖里面的抽象方法// //这里想起来了。是不是我们自定义的BufferedReader这里也没有改//private int lineNumber; //有行号说明它有私有的成员变量是记录用户的行号////首先它有和BufferedReader一样的功能因为它是继承自BufferedReader////它和BufferedReader一样它都是对Reader的子类对象进行功能增强使用////private Reader r;////public MyLineNumberReader(Reader r){////this.r=r;////调用父类中的构造方法//super(r); //父类中有参的构造//}//////public int read(char[] cbuf, int off, int len) throws IOException{////return r.read(cbuf,off,len);////} ////public void setLineNumber(int lineNumber){ //设置和获取行号的方法//this.lineNumber=lineNumber;//}////public int getLineNumber() { //行号是在什么时候自增了? //是在读取一行之后//return this.lineNumber; //获取行号//}//// public String myReadLine() throws IOException{ //自定义的读取一行的方法//this.lineNumber++; //读取一行,即调用了该方法,让行号自增////下面的功能和父类是一样的。我们就不自己写了。我们直接调用父类的就可以了//return super.myReadLine(); //直接返回父类的方法的调用的结果////StringBuilder sb=new StringBuilder();////int len=0;////while((len=r.read())!=-1){ //不停的读取数据 //这里的细节要注意////if(len=='\r')////continue;////if(len=='\n'){////return sb.toString(); //到了换行直接把内容返回////}else////sb.append((char)len);////}////if(sb.length()>0){////return sb.toString();////}////return null;//}//////public void close() throws IOException{ //关闭的方法////r.close();////}//}//class MyLineNumberReader extends Reader{ //自定义的LineNumberReader// //提高扩展性。只要是Reader的子类对象都是可以进行包装的// //我们需要覆盖里面的抽象方法// //这里想起来了。是不是我们自定义的BufferedReader这里也没有改//private int lineNumber; //有行号说明它有私有的成员变量是记录用户的行号////首先它有和BufferedReader一样的功能因为它是继承自BufferedReader////它和BufferedReader一样它都是对Reader的子类对象进行功能增强使用//private Reader r;////public MyLineNumberReader(Reader r){//this.r=r;//}////public int read(char[] cbuf, int off, int len) throws IOException{//return r.read(cbuf,off,len);//} ////public void setLineNumber(int lineNumber){ //设置和获取行号的方法//this.lineNumber=lineNumber;//}////public int getLineNumber() { //行号是在什么时候自增了? //是在读取一行之后//return this.lineNumber; //获取行号//}//// public String myReadLine() throws IOException{ //自定义的读取一行的方法//this.lineNumber++; //读取一行,即调用了该方法,让行号自增//StringBuilder sb=new StringBuilder();//int len=0;//while((len=r.read())!=-1){ //不停的读取数据 //这里的细节要注意//if(len=='\r')//continue;//if(len=='\n'){//return sb.toString(); //到了换行直接把内容返回//}else//sb.append((char)len);//}//if(sb.length()>0){//return sb.toString();//}//return null;//}////public void close() throws IOException{ //关闭的方法//r.close();//}//}////自定义的LineNumberReader 未优化版//class MyLineNumberReader{//private int lineNumber; //有行号说明它有私有的成员变量是记录用户的行号////首先它有和BufferedReader一样的功能因为它是继承自BufferedReader////它和BufferedReader一样它都是对Reader的子类对象进行功能增强使用//private FileReader fr;////public MyLineNumberReader(FileReader fr){//this.fr=fr;//}////public void setLineNumber(int lineNumber){ //设置和获取行号的方法//this.lineNumber=lineNumber;//}////public int getLineNumber(){ //行号是在什么时候自增了? //是在读取一行之后//return this.lineNumber; //获取行号//}//// public String myReadLine() throws IOException{ //自定义的读取一行的方法//this.lineNumber++; //读取一行,即调用了该方法,让行号自增//StringBuilder sb=new StringBuilder();//int len=0;//while((len=fr.read())!=-1){ //不停的读取数据 //这里的细节要注意//if(len=='\r')//continue;//if(len=='\n'){//return sb.toString(); //到了换行直接把内容返回//}else//sb.append((char)len);//}//if(sb.length()>0){//return sb.toString();//}//return null;//}////public void close() throws IOException{ //关闭的方法//fr.close();//}//}
0 0
- 《黑马程序员》 装饰类-自定义BufferedReader和LineNumberReader
- 黑马程序员_<<字符流的缓冲技术和装饰类(BufferedWriter,BufferedReader,LineNumberReader)>>
- 黑马程序员——21,字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader
- BufferedReader子类LineNumberReader装饰类的简单介绍
- 黑马程序员——自定义类模拟实现LineNumberReader类
- 自定义装饰类BufferedReader
- 黑马程序员-81-自定义BufferedReader类
- 黑马程序员_十五 【字节流】【装饰模式】【LineNumberReader】
- 黑马程序员---BufferedReader和BufferedWriter两个类
- 黑马程序员——模拟缓冲区,模拟BufferedReader类自定义
- 黑马程序员 IO之自定义BufferedReader
- IO操作 模拟一下BufferedReader和LineNumberReader
- 黑马程序员-78-BufferedReader类
- 字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader
- 黑马程序员——IO流(二)之BufferedReader装饰类
- 黑马程序员_IO流中的BufferedReader类和BufferedWriter类
- java BufferedReader类的子类-LineNumberReader类
- 黑马程序员——学习Java基础之 io LineNumberReader 之装饰设计模式
- Ubuntu 13.10 web环境(Eclipse+插件)搭建
- String类陷阱深度剖析 -字符串池-栈-堆-equal--tostring--hashcod
- Ant工具介绍
- C语言位域概念
- 用户 'sa' 登录失败。原因: 该帐户被禁用
- 《黑马程序员》 装饰类-自定义BufferedReader和LineNumberReader
- 滑动变阻器
- 直接初始化和复制初始化
- 递归函数、全局变量、局部变量、静态变量、常量、指针变量
- Ubuntu 安装 Redis
- HDU 2818 (带权并查集)
- python模块--urllib
- useradd: cannot lock /etc/passwd; try again later.
- 关于MDK和IAR的恩恩怨怨