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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 艾衍年 中级黑马   /  2012-7-14 13:21  /  1474 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//看毕老师的视频,IO流,通过缓冲区复制文本文件的知识,下面这一点儿不是很明白,代码贴出来了,也给出注释,希望各位亲们能帮忙解答

public String myReadLine() throws IOException        //这里是自己写的一个方法,根据BufferecReader类中readLine方法的原理
{
  StringBuilder sb = new StringBuilder();                //使用StringBuilder的一个对象,模拟一个存储区
  
  int ch = 0;                                                        
  
  while((ch = fr.read()) != -1 )
  {
   if(ch == '\r')
    continue;
   if(ch == '\n')                                                  //换行是\r\n,如果遇到的是 '\r' ,就跳过这次循环执行下一次,如果读到的是 '\n' ,就就把存到缓冲区里的字符返回
    return sb.toString();                                        //这里也是返回1
   else                                                             //否则 就继续往缓冲区里读内容
    sb.append((char)ch);
  }
  if(sb.length() != 0)                                       //这里是 假如针对文本最后一行没有换行符的情况,读到文件末就判断一下缓冲区里有没有数据,有数据就输出。
   return sb.toString();                                    //这里也是返回2
  return null;                                                  //这里也是返回 3
}
//这里是主函数
public static void main(String[] args) throws IOException
{
  // TODO Auto-generated method stub
  FileReader r = new FileReader("乱七八糟.txt");
  MyBufferedReader myBuf = new MyBufferedReader(r);
  String line = null;
  while((line = myBuf.myReadLine()) != null);        //用line接受myReadLine方法返回的字符
  {
   System.out.println(line);                                      //输出line
  }
  myBuf.myClose();                                             //关闭FileRead
}
问题出来了,这个三个返回!!毕老师讲解的时候代码能正常运行,输出的是文件里的内容,我按照老师的敲在Myeclise里运行结果一直是 null,我疑惑的是老师的那三个返回,到底返回的啥,为什么我的一直输出的null,那不就是一直返回null的?

这个是文件内容                                            这个是文件位置

1 个回复

倒序浏览
本帖最后由 achilles 于 2012-7-14 16:25 编辑

public static void main(String[] args) throws IOException
{
  // TODO Auto-generated method stub
  FileReader r = new FileReader("乱七八糟.txt");
  MyBufferedReader myBuf = new MyBufferedReader(r);
  String line = null;
  while((line = myBuf.myReadLine()) != null); //你这里加了个;下面的那句输出语句不受循环的控制了.前面定义了line=null,所以下面的输出语句当然都是null  
      {
   System.out.println(line);                                      //输出line
  }
  myBuf.myClose();                                             //关闭FileRead
}

点评

哎呦 傻了 死活没检查出来 不知道什么时候那儿多了 一分号 感谢感谢  发表于 2012-7-14 23:02

评分

参与人数 1黑马币 +1 收起 理由
艾衍年 + 1 赞一个!

查看全部评分

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