- package com.mth.MyBufferReadLine;
- import java.io.FileReader;
- import java.io.IOException;
- /*
- *
- * 明白了BufferedReader类中特有方法readLine()之后
- * 可以自定义一个类中包含一个功能和readLine()一致的方法
- * 来模拟一下BufferedReader
- *
- *
- * */
- public class MyBufferedReader {
- private FileReader fr;
- public MyBufferedReader(FileReader fr) {
- super();
- this.fr = fr;
- }
- // 可以一次读一行数据的方法
- // 原理就是读一个存一个 结果返回字符串(这个方法来自于FileReader里面的read()方法)
- // 选取集合用StringBuilder 不必考虑大小 正好是string
- // 异常选择抛出 因为是别人调用你的功能 你要告诉别人 有异常 谁调用 谁处理
- public String myReadLine() throws IOException {
- /*
- * 定义一个 临时容器 原BufferReader中封装的是字符数组 为了演示方便 定义一个StringBuilder 容器
- * 因为最终还是要将字符变成字符串
- */
- StringBuilder sb = new StringBuilder();
- int ch = 0;
- /*
- * 读一个存一个 当读到回车符的时候 把字符串返回 回车符由(\r\n)构成 sb里面 不存回车符
- */
- while ((ch = fr.read()) != -1) {
- if (ch == '\r')
- continue;
- if (ch == '\n') {
- return sb.toString();
- } else {
- sb.append((char) ch);
- }
- }
-
- /*
- * 这里判断是把最后一行的回车符删除后出现 最后一行读不出来
- * 实际上已经存在sb里面 只不过 没有返回 加了一个判断
- *
- * */
-
-
- if (sb.length() != 0) {
- return sb.toString();
- }
- return null;
- }
- /*
- * 关闭方法 因为缓冲区是为fr 服务的 所以 fr的关闭就是关闭缓冲区
- */
- public void myClose() throws IOException {
- fr.close();
- }
- }
复制代码 |