黑马程序员技术交流社区

标题: 求解答 [打印本页]

作者: 艾衍年    时间: 2012-7-14 13:21
标题: 求解答
//看毕老师的视频,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的?

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


作者: 游兴钟    时间: 2012-7-14 16:21
本帖最后由 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
}





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