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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李健09 中级黑马   /  2013-8-26 21:29  /  1580 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李健09 于 2013-8-27 15:10 编辑
  1. package com.IO2;
  2. /*
  3. 明白了BufferedReader类中特有的方法readLine的原理后,可以自己定义一个类中包含一个功能和readLine一直的方法,
  4. 来模拟一下BufferedReader
  5. */
  6. import java.io.*;
  7. class MyBufferedReader
  8. {
  9.         private FileReader r;
  10.         MyBufferedReader(FileReader r)
  11.         {
  12.                 this.r =r;
  13.         }
  14.         //可以一次读一行数据的方法
  15.         public String myReadLine() throws IOException
  16.         {
  17.                 //定义一个临时容器,原BufferReader封装的是字符数组,为了演示方便,定义一个StringBuilder容器,
  18.                 //因为最终还是要将数据变成字符串
  19.                 StringBuilder sb=new StringBuilder();
  20.                 int ch=0;
  21.                 while((ch=r.read())!=-1)
  22.                 {
  23.                         if(ch=='\r')
  24.                                 continue;
  25.                         if(ch=='\n')
  26.                                 return sb.toString();
  27.                         else
  28.                                 sb.append((char)ch);
  29.                 }
  30.                 if(sb.length()!=0)
  31.                         return sb.toString();
  32.                 return null;
  33.         }
  34.         public void myClose() throws IOException
  35.         {
  36.                 r.close();
  37.         }
  38. }
  39. public class MyBufferedReaderDemo
  40. {
  41.         public static void main(String[] args) throws IOException
  42.         {
  43.                 FileReader fr=new FileReader("F:\\java\\Workspaces\\MyEclipse Bling Edition 10\\day19\\mybufferedReader.txt");
  44.                 MyBufferedReader myBuf=new MyBufferedReader(fr);
  45.                 String line=null;
  46.                 while((line=myBuf.myReadLine())!=null)
  47.                 {
  48.                         sop(line);
  49.                         
  50.                 }
  51.                 myBuf.myClose();
  52.         }
  53.         public static void sop(Object obj)
  54.         {
  55.                 System.out.println(obj);
  56.         }

  57. }
复制代码
问下  主函数中while 语句中 line=myBuf.myReadLine())!=null       line直接指向MyBufferedReader类的myReadLine() 方法不是应该是类名调用吗?
         帮忙解释下;谢

4 个回复

倒序浏览
{:soso_e136:}
没懂 楼主想问神马
回复 使用道具 举报
首先你的myReadLine() 方法时非静态的,必须有一个this所属,怎么能够类名调用呢?

其次“主函数中while 语句中 line=myBuf.myReadLine())!=null       line直接指向MyBufferedReader类的myReadLine() 方法”这个说法有误吧,这里应该是将myReadLine()的返回值赋给line啊,line怎么又指向了myReadLine() 方法了?
回复 使用道具 举报 1 0
不好意思二位 是我想多了 刘张朋 说的对,看了解释恍然大悟想的离谱了
回复 使用道具 举报
神之梦 发表于 2013-8-26 22:00
没懂 楼主想问神马

{:soso_e110:}{:soso_e117:}{:soso_e118:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马