A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenshiji 中级黑马   /  2015-1-7 22:12  /  863 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个类,增强java.io.BufferedReader的ReadLine()方法,使之在读取某个文件时,能打印出行号。
哪位大神可以提供代码啊?

2 个回复

倒序浏览
  1. package other;

  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. /*
  7. 装饰者设计模式:增强一个类的功能,而且还可以让这些装饰类互相装饰。

  8. 装饰者设计模式的步骤:
  9.         1. 在装饰类的内部维护一个被装饰类的引用。
  10.         2. 让装饰类有一个共同的父类或者是父接口。


  11. 需求1: 编写一个类拓展BufferedReader的功能, 增强readLine方法返回 的字符串带有行号。

  12. 需求2:编写一个类拓展BufferedReader的功能, 增强readLine方法返回 的字符串带有分号。
  13.   

  14. 需求3: 编写一个类拓展BufferedReader的功能, 增强readLine方法返回 的字符串带有双引号。

  15. 需求4: 编写一个类拓展BufferedReader的功能, 增强readLine方法返回 的字符串带有行号+ 分号。
  16.   
  17.   
  18. 需求5: 编写一个类拓展BufferedReader的功能, 增强readLine方法返回 的字符串带有分号+ 双引号。

  19. 需求6: 编写一个类拓展BufferedReader的功能, 增强readLine方法返回 的字符串带有双引号+ 行号。
  20.    
  21. 需求7: 编写一个类拓展BufferedReader的功能, 增强readLine方法返回 的字符串带有行号+ 分号+双引号。

  22. 继承实现的增强类和修饰模式实现的增强类有何区别?

  23.         继承实现的增强类:
  24.                 优点:代码结构清晰,而且实现简单.
  25.                 缺点:对于每一个的需要增强的类都要创建具体的子类来帮助其增强,这样会导致继承体系过于庞大。

  26. 修饰模式实现的增强类:
  27.                 优点:内部可以通过多态技术对多个需要增强的类进行增强, 可以是这些装饰类达到互相装饰的效果。使用比较灵活。
  28.                
  29.                 缺点:需要内部通过多态技术维护需要被增强的类的实例。进而使得代码稍微复杂。


  30. */
  31. import java.io.IOException;


  32. //带行号的缓冲输入字符流
  33. class BufferedLineNum2  extends BufferedReader{  
  34.        
  35.         //在内部维护一个被装饰类的引用。
  36.         BufferedReader bufferedReader;
  37.        
  38.         int count = 1;
  39.        
  40.         public BufferedLineNum2(BufferedReader bufferedReader){
  41.                 super(bufferedReader);// 注意: 该语句没有任何的作用,只不过是为了让代码不报错。
  42.                 this.bufferedReader = bufferedReader;
  43.         }
  44.        
  45.        
  46.         public String readLine() throws IOException{
  47.                 String line = bufferedReader.readLine();
  48.                 if(line==null){
  49.                         return null;
  50.                 }
  51.                 line = count+" "+line;
  52.                 count++;
  53.                 return line;
  54.         }
  55. }


  56. //带分号缓冲输入字符流
  57. class BufferedSemi2 extends BufferedReader{  //为什么要继承?  是为了让这些装饰类的对象可以作为参数进行传递,达到互相装饰 的效果。

  58.         //在内部维护一个被装饰类的引用。
  59.         BufferedReader bufferedReader;
  60.                
  61.        
  62.         public BufferedSemi2(BufferedReader bufferedReader){ // new BuffereLineNum();
  63.                 super(bufferedReader);// 注意: 该语句没有任何的作用,只不过是为了让代码不报错。
  64.                 this.bufferedReader = bufferedReader;
  65.         }
  66.        
  67.         public String readLine() throws IOException{
  68.                 String line = bufferedReader.readLine();  //如果这里的ReadLine方法是调用了buffereLineNum的readLine方法,问题马上解决。
  69.                 if(line==null){
  70.                         return null;
  71.                 }
  72.                 line = line +";";
  73.                 return line;
  74.         }
  75.        
  76. }

  77. //缓冲类带双引号
  78. class BufferedQuto2 extends BufferedReader{
  79.        
  80.         //在内部维护一个被装饰的类
  81.         BufferedReader bufferedReader;
  82.        
  83.         public BufferedQuto2(BufferedReader bufferedReader){  //new  BufferedSemi2();
  84.                 super(bufferedReader) ; //只是为了让代码不报错..
  85.                 this.bufferedReader = bufferedReader;
  86.         }
  87.        
  88.         public String readLine() throws IOException{
  89.                 String line = bufferedReader.readLine();  //如果这里的ReadLine方法是调用了buffereLineNum的readLine方法,问题马上解决。
  90.                 if(line==null){
  91.                         return null;
  92.                 }
  93.                 line = "\""+line +"\"";
  94.                 return line;
  95.         }
  96.        
  97.        
  98. }



  99. public class Demo2 {
  100.        
  101.         public static void main(String[] args) throws IOException {
  102.                 File file = new File("F:\\Demo1.java");
  103.                 FileReader fileReader = new FileReader(file);
  104.                 //建立缓冲输入字符流
  105.                 BufferedReader bufferedReader = new BufferedReader(fileReader);
  106.                 //建立带行号的缓冲输入字符流
  107.                 BufferedLineNum2 bufferedLineNum = new BufferedLineNum2(bufferedReader);
  108.                
  109.                 //带分号的缓冲输入字符流
  110.                 BufferedSemi2 bufferedSemi2 = new BufferedSemi2(bufferedLineNum);
  111.                
  112.                 //带双引号的缓冲输入字符流
  113.                 BufferedQuto2 bufferedQuto2 = new  BufferedQuto2(bufferedSemi2);
  114.                
  115.                 String line = null;
  116.                 while((line = bufferedQuto2.readLine())!=null){
  117.                         System.out.println(line);
  118.                 }
  119.                
  120.                
  121.                
  122.                
  123.         }
  124.        
  125. }昨天刚学,现将代码全文附上
复制代码
回复 使用道具 举报
感谢分享!我也来研究研究!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马