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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.io.*;
  2. class MyBufferRead
  3. {
  4.         private FileReader fr;
  5.         MyBufferRead(FileReader fr)
  6.         {
  7.                 this.fr=fr;
  8.         }

  9.         public String myReadLine() throws IOException
  10.         {
  11.                 /*
  12.                 我们知道在缓冲区中readLine的方法返回是一行的字符串,内存模拟可以通过数组去
  13.                 接受,并且返回,但是这样不好控制,所以我们直接用StringBuilder来完成,这种动态的
  14.                 返回字符串,非常便捷,而且简单,所以这里就定义了一个容器
  15.                 */
  16.                 StringBuilder sb=new StringBuilder();
  17.                
  18.                 //通过读取单个字符的方式去进行一一读取
  19.                 int ch=0;

  20.                 //判断的条件就是当不为-1时,仍然循环去读取
  21.                 while ((ch=fr.read())!=-1)
  22.                 {
  23.                         if (ch=='\r') //当读取到回车是跳过此循环继续进行下一个循环
  24.                         {
  25.                                 continue;
  26.                         }
  27.                         if (ch=='\n')//当读取到换行的时候,那么就返回容器中已经存在内容(即为一行)
  28.                         {
  29.                                 return sb.toString();
  30.                         }else
  31.                         {
  32.                                 sb.append((char)ch); //把读取的一行数据添加到容器中临时存起来
  33.                         }
  34.                 }
  35.                         if (sb.length()!=0) //最后如果容器中内容长度不为0,那么全部返回
  36.                         {
  37.                                 return sb.toString();
  38.                         }
  39.                         return null; //否则返回为null
  40.         }

  41.         public void myClose() throws IOException //模仿的是关闭缓冲区流的方法
  42.         {
  43.                 fr.close();
  44.         }
  45. }
  46. class MyBufferedReader4
  47. {
  48.         public static void main(String[] args) throws IOException
  49.         {
  50.                 //下面的内容很简单了,就是调用自己的方法去执行,最终把读取出来的内容显示在屏幕上
  51.                 FileReader fr=new FileReader("MyBufferedReader4.java");

  52.                 MyBufferRead mr=new MyBufferRead(fr);
  53.                 String line=null;
  54.                 while ((line=mr.myReadLine())!=null)
  55.                 {
  56.                         sop(line);
  57.                 }
  58.                 mr.myClose(); //关闭缓冲区流对象
  59.         }
  60.         public static void sop(Object obj)
  61.         {
  62.                 System.out.println(obj);
  63.         }
  64. }
复制代码


关于这里的
if (sb.length()!=0) //最后如果容器中内容长度不为0,那么全部返回
        {
         return sb.toString();
        }

1 个回复

倒序浏览
是为了应对当读取最后一行时没有换行的情况出现,避免少读一行,因为之前的条件是在读取到换行时才返回数据
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马