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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 涐扪①起奮乧 于 2013-11-10 13:35 编辑

  1. <P>import java.io.*;
  2. class MyBufferedReader
  3. {
  4.         private FileReader r;
  5.         MyBufferedReader(FileReader r)
  6.         {
  7.                 this.r = r;
  8.         }
  9.         //可以一次读取一行数据的方法

  10.      public String myReadLine()throws IOException
  11.                 {
  12.                    //定义一个临时容器。原BufferedReader封装的是字符数组
  13.                    //定义一个StringBuilder容器,因为最终还是要将数据变成字符串
  14.                    StringBuilder sb = new StringBuilder();
  15.                    int ch = 0;
  16.                         while((ch = r.read())!=-1)
  17.                         {
  18.                                 if(ch=='\r')
  19.                                         continue;
  20.                                 if(ch=='\n')
  21.                                         return sb.toString();
  22.                                 else
  23.                                         sb.append((char)ch);
  24.                         }
  25.                         if(sb.length()!=0)
  26.                                 return sb.toString();
  27.                         return null;   
  28.                 }</P>
  29. <P>            public void myClose() throws IOException
  30.                 {
  31.                        r.close();
  32.                 }

  33. }

  34. class MyBufferedReaderDemo
  35. {
  36.      public static void main(String[] args) throws IOException

  37.                 {
  38.                             FileReader fr = new FileReader("demo.text");

  39.                                 MyBufferedReader myBuf = new MyBufferedReader(fr);
  40.                                 String line = null;
  41.                                 while((line=myBuf.myReadLine())!=null)
  42.                                 {
  43.                                         System.out.println(line);
  44.                                 }
  45.                                 myBuf.myClose();
  46.                 }
  47.         </P>
复制代码
我做练习时写的代码,运行的时候提示,无法加载主类,怎么个情况?

还有                                                 if(sb.length()!=0)
                                return sb.toString
对这两句代码不太理解

4 个回复

倒序浏览
你就是有几个小问题,首先class MyBufferedReader中 close方法放在外面,你把close方法放myreadline方法中了。然后就是你主函数中创建类对象之后调用该类对象方法时大小写没写对。改过来之后就行了

import java.io.*;
class MyBufferedReader
{
        private FileReader r;
        MyBufferedReader(FileReader r)
        {
                this.r = r;
        }
        //可以一次读取一行数据的方法

     public String myReadLine()throws IOException
                {
                   //定义一个临时容器。原BufferedReader封装的是字符数组
                   //定义一个StringBuilder容器,因为最终还是要将数据变成字符串
                   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)
                                return sb.toString();
                        return null;

                       
                }
public void myClose() throws IOException
                        {
                                r.close();
                        }

}

class MyBufferedReaderDemo
{
     public static void main(String[] args) throws IOException

                {
                            FileReader fr = new FileReader("demo.text");

                                MyBufferedReader myBuf = new MyBufferedReader(fr);
                                String line = null;
                                while((line=myBuf.myReadLine())!=null)
                                {
                                        System.out.println(line);
                                }
                                myBuf.myClose();
                }
}
        
回复 使用道具 举报
对于if(sb.length()!=0)
                                return sb.toString();
                        return null;
首先你的方法的目的就是return一个string,第一句就是sb不为空,那么就肯定sb中有字符啊,sb.tostring就是把sb的字符串打出来啊。。。否则就是sb中没有任何东西,当然输出null啦(新手回复,不对的话版主见谅)
回复 使用道具 举报
hubby 发表于 2013-11-9 18:17
对于if(sb.length()!=0)
                                return sb.toString();
                        ...

对于这句代码有什么问题吗  就是为了把最后没返的数返出来
回复 使用道具 举报
首先把,不知是不是论坛问题,觉得楼主你的代码阅读性对于我来说挺的。我把你的代码复制运行发现没问题,加上我自己的经验,你遇到的问题可能是:你运行时用的命令是:java MyBufferedReaderDemo.java
   javac才是对应有后缀名.java的。

怎么感觉最近自己老是回答类似问题.......
  1. import java.io.*;

  2. class MyBufferedReader
  3. {

  4. private FileReader r;

  5. MyBufferedReader(FileReader r)
  6. {
  7. this.r = r;
  8. }

  9. //可以一次读取一行数据的方法
  10. public String myReadLine()throws IOException
  11. {

  12. //定义一个临时容器。原BufferedReader封装的是字符数组
  13. //定义一个StringBuilder容器,因为最终还是要将数据变成字符串
  14. StringBuilder sb = new StringBuilder();
  15. int ch = 0;

  16. while((ch = r.read())!=-1)
  17. {
  18. if(ch=='\r')
  19. continue;
  20. if(ch=='\n')
  21. return sb.toString();
  22. else
  23. sb.append((char)ch);
  24. }
  25. if(sb.length()!=0)
  26. return sb.toString();

  27. return null;
  28. }

  29. public void myClose() throws IOException
  30. {
  31. r.close();
  32. }
  33. }

  34. class MyBufferedReaderDemo
  35. {
  36. public static void main(String[] args) throws IOException
  37. {
  38. FileReader fr = new FileReader("d:\\Demo.txt");

  39. MyBufferedReader myBuf = new MyBufferedReader(fr);

  40. String line = null;

  41. while((line=myBuf.myReadLine())!=null)
  42. {
  43. System.out.println(line);
  44. }
  45. myBuf.myClose();
  46. }
  47. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

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