黑马程序员技术交流社区

标题: 求大神看一下,问什么输不出最后一行 [打印本页]

作者: 王东    时间: 2013-11-5 15:11
标题: 求大神看一下,问什么输不出最后一行
  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. }
复制代码
为什么不能输出文件的最后一行
作者: 青年黨衛軍    时间: 2013-11-5 15:47
你的程序中myReadLine()方法代码块中while内循环结束后,在return null;之前,还需要加上以下代码:

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

原因是:如果你的文件内容最后一行末尾没有回车符”\r\n“的话,最后一行默认没有结束,StringBuffer中的内容是无法打印出来的。
所以你需要判断最后一行是否有内容,如果StringBuffer中不为空的话,需要将内容打印出来。
作者: 王东    时间: 2013-11-5 18:33
青年黨衛軍 发表于 2013-11-5 15:47
你的程序中myReadLine()方法代码块中while内循环结束后,在return null;之前,还需要加上以下代码:

if(sb ...

恩恩,谢谢指导。谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2