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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李娟 黑马帝   /  2011-12-22 09:18  /  1629 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李娟 于 2011-12-22 18:50 编辑

class MyBufferedReader
{
        private FileReader r;
        MyBufferedReader(FileReader r)
        {
                this.r = r;
        }

        public String myReadLine() throws IOException
        {
                StringBuilder sb = new StringBuilder();
                int ch = 0;
                while((ch=r.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                                return sb.toString();
                        else
                            sb.append((char)ch);
                }
                if(sb.length()!=0)     //如果没有这两行,运行结果也是4个数据
                        return sb.toString();
                return null;
        }

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

3 个回复

倒序浏览
"if(sb.length()!=0)     //如果没有这两行,运行结果也是4个数据"这句话的意思你判断字符串sb的长度是否为0,即你从文件中是否读入了字符,如果sb的长度大于0,这句话有没有运行效果都一样,例如你说的读入了4个数据的时候,sb.length() 的值是4,而4 !=0 所以就返回了sb,如果不用这句话两个return null;就不要了。
回复 使用道具 举报
杨强 黑马帝 2011-12-22 09:54:08
藤椅
if(sb.length()!=0)     //如果没有这两行,运行结果也是4个数据
                        return sb.toString();
如果你的文件中写的是abcd但是没打回车  少了这两行是什么都输出不出来的
主要针对最后没有换行的数据

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
这样改写,不正确。
当a.txt文件中,若文件末尾不包含"回车换行",改写的程序读取该文件时,文件的最后一行是无法读取到的。
  1. import java.io.*;
  2. class MyBufferedReader
  3. {
  4.         private FileReader r;
  5.         MyBufferedReader(FileReader r)
  6.         {
  7.                 this.r = r;
  8.         }

  9.         public String myReadLine() throws IOException
  10.         {
  11.                 StringBuilder sb = new StringBuilder();
  12.                 int ch = 0;
  13.                 while((ch=r.read())!=-1)
  14.                 {
  15.                         if(ch=='\r')
  16.                                 continue;
  17.                         if(ch=='\n')
  18.                                 return sb.toString();
  19.                         else
  20.                             sb.append((char)ch);
  21.                 }
  22.                 /**
  23.                 当你上边使用“return sb.toString();”,并将下面两行代码注销后,
  24.                 对于a.txt文件中,若文件末尾不包含"回车换行",这个程序读取该文件时,文件的最后一行是无法读取到的。
  25.                 */
  26.                 //if(sb.length()!=0)     
  27.                 //        return sb.toString();
  28.                 return null;
  29.         }
  30.         public static void main(String [] args) throws IOException
  31.         {
  32.                         MyBufferedReader my = new MyBufferedReader(new FileReader("d:\\a.txt"));
  33.                         String line=null;
  34.                         while((line=my.myReadLine())!=null)
  35.                         {
  36.                                 System.out.println(line);       
  37.                         }
  38.         }
  39. }
复制代码
测试文件a.txt原内容:
11111
222222
3333333(注意:最后没有回车换行)
测试结果:
  1. 11111
  2. 222222
复制代码

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马