MyLineNumberReader

MyLineNumberReader
 1 package com.itheima;
 2 
 3 import java.io.FileReader;
 4 import java.io.IOException;
 5 import java.io.Reader;
 6 
 7 public class Test06 {
 8 
 9     /**
10      * 需求:
11      * 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
12      * 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,
13      * 能够在读取的每行前面都加上有行号和冒号
14      * @param args
15      */
16     public static void main(String[] args) throws IOException
17     {
18         //创建流对象并关联文件
19         FileReader fr = new FileReader("Test01.java");
20         //对流进行包装
21         MyLineNumberReader mylnr = new MyLineNumberReader(fr);
22         
23         String line = null;
24         //读取一行记录一行
25         while((line=mylnr.myReadLine())!=null)
26         {
27             System.out.println(mylnr.getLineNumber()+":"+line);
28         }
29         //关流
30         mylnr.myClose();
31     }
32 }
33 
34 
35 class MyLineNumberReader 
36 {
37     //定义流对象
38     private Reader r;
39     private int lineNum;
40     //传入被装饰对象
41     MyLineNumberReader(Reader r)
42     {
43         this.r = r;
44     }
45     //对外提供方法
46     public String myReadLine()throws IOException
47     {
48         //读取一行就自增一次
49         lineNum++;
50         //自定义缓冲区
51         StringBuilder sb = new StringBuilder();
52 
53         int ch = 0;
54         //不为空一直读取
55         while((ch=r.read())!=-1)
56         {
57             if(ch==‘\r‘)//判断标记
58                 continue;
59             if(ch==‘\n‘)
60                 return sb.toString();
61             else
62                 sb.append((char)ch);//将读取到的字符添加到缓冲区
63         }
64         //判断缓冲区是否为空
65         if(sb.length()!=0)
66             return sb.toString();//不为空继续返回里面内容
67         return null;
68     }
69     public void setLineNumber(int lineNum)
70     {
71         this.lineNum = lineNum;
72     }
73     public int getLineNumber()
74     {
75         return lineNum;
76     }
77     //对外提供关闭流的方法
78     public void myClose()throws IOException
79     {
80         r.close();
81     }
82 }
83  
MyLineNumberReader

MyLineNumberReader

上一篇:关于递归


下一篇:第一次进div1了