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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王东 中级黑马   /  2013-11-5 15:11  /  1316 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;

  2. /*
  3.         模拟BufferedReader
  4.                 readLine()的原理
  5. */

  6. class  MyBufferedReader
  7. {
  8.         private FileReader fr;

  9.         MyBufferedReader(FileReader fr){
  10.                 this.fr = fr;
  11.         }

  12.         //可以一次读一行数据的方法
  13.         public String myReadLine() throws IOException
  14.                 {
  15.                 //定义一个临时容器,原BufferedReader封装的是字符数组。
  16.                 //为了演示方便,定义一个StringBuiler容器,因为最终还是将数组变成字符串。
  17.                 StringBuilder sb = new StringBuilder();

  18.                 int ch = 0;
  19.                 while ((ch = fr.read()) != -1)
  20.                 {
  21.                         if(ch == '\r')
  22.                                 continue;
  23.                         if(ch == '\n')
  24.                                 return sb.toString();
  25.                         else
  26.                                 sb.append((char)ch);
  27.                 }

  28.                 return null;
  29.         }

  30.         public void myClose()throws IOException
  31.                 {
  32.                         fr.close();
  33.                 }
  34. }


  35. class MyBufferedReaderTest
  36. {
  37.         public static void main(String[] args) throws IOException
  38.         {
  39.                 FileReader fr = new FileReader("buf.txt");

  40.                 MyBufferedReader mybuf = new MyBufferedReader(fr);

  41.                 String line = null;
  42.                 while((line = mybuf.myReadLine()) != null ){
  43.                         System.out.println(line);
  44.                 }

  45.                 mybuf.myClose();
  46.         }
  47. }
复制代码
为什么不能输出文件的最后一行

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

2 个回复

倒序浏览
你的程序中myReadLine()方法代码块中while内循环结束后,在return null;之前,还需要加上以下代码:

if(sb.length() != 0)
{
    return sb.toString();
}

原因是:如果你的文件内容最后一行末尾没有回车符”\r\n“的话,最后一行默认没有结束,StringBuffer中的内容是无法打印出来的。
所以你需要判断最后一行是否有内容,如果StringBuffer中不为空的话,需要将内容打印出来。

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

回复 使用道具 举报
青年黨衛軍 发表于 2013-11-5 15:47
你的程序中myReadLine()方法代码块中while内循环结束后,在return null;之前,还需要加上以下代码:

if(sb ...

恩恩,谢谢指导。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马