1 /** 2 需求:自定义一个包含 readLine 方法的 BufferedReader 来模拟一下 BufferedReader 3 */ 4 import java.io.FileReader; 5 import java.io.IOException; 6 import java.io.Reader; 7 8 class MyBufferedReader extends Reader { 9 private Reader r; 10 11 MyBufferedReader(Reader r)// 建立构造函数.一开始就要有流 12 { 13 this.r = r; 14 } 15 16 // 可以一次读一行数据的方法。 17 public String myReadLine() throws IOException { 18 // 定义一个临时容器。原BufferReader封装的是字符数组。 19 // 为了演示方便。定义一个StringBuilder容器。因为最终还是要将数据变成字符串。 20 StringBuilder sb = new StringBuilder(); 21 int ch = 0; 22 while ((ch = r.read()) != -1) { 23 if (ch == ‘\r‘) 24 continue;// 判断如果是\r的话在运行.判刑下个\n,如果是最后一行了.返回字符串 25 if (ch == ‘\n‘) 26 return sb.toString(); 27 else 28 sb.append((char) ch); 29 } 30 31 if (sb.length() != 0) 32 return sb.toString(); 33 return null; 34 } 35 36 /* 37 * 覆盖Reader类中的抽象方法。 38 */ 39 public int read(char[] cbuf, int off, int len) throws IOException { 40 return r.read(cbuf, off, len); 41 } 42 43 public void close() throws IOException { 44 r.close(); 45 } 46 47 public void myClose() throws IOException { 48 r.close(); 49 } 50 } 51 52 class MyBufferedReaderDemo { 53 public static void main(String[] args) throws IOException { 54 FileReader fr = new FileReader("buf.txt"); 55 56 MyBufferedReader myBuf = new MyBufferedReader(fr);// 自定义的装饰类 57 58 String line = null; 59 60 while ((line = myBuf.myReadLine()) != null) { 61 System.out.println(line); 62 } 63 myBuf.myClose();// 关闭资源 64 } 65 }