黑马程序员技术交流社区
标题:
自定义MyBufferedReader问题咨询!!
[打印本页]
作者:
涐扪①起奮乧
时间:
2013-11-9 17:48
标题:
自定义MyBufferedReader问题咨询!!
本帖最后由 涐扪①起奮乧 于 2013-11-10 13:35 编辑
<P>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;
}</P>
<P> 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();
}
</P>
复制代码
我做练习时写的代码,运行的时候提示,无法加载主类,怎么个情况?
还有 if(sb.length()!=0)
return sb.toString
对这两句代码不太理解
作者:
hubby
时间:
2013-11-9 18:11
你就是有几个小问题,首先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();
}
}
作者:
hubby
时间:
2013-11-9 18:17
对于if(sb.length()!=0)
return sb.toString();
return null;
首先你的方法的目的就是return一个string,第一句就是sb不为空,那么就肯定sb中有字符啊,sb.tostring就是把sb的字符串打出来啊。。。否则就是sb中没有任何东西,当然输出null啦(新手回复,不对的话版主见谅)
作者:
枫儿
时间:
2013-11-9 18:24
hubby 发表于 2013-11-9 18:17
对于if(sb.length()!=0)
return sb.toString();
...
对于这句代码有什么问题吗 就是为了把最后没返的数返出来
作者:
发哥-阿花
时间:
2013-11-9 19:17
首先把,不知是不是论坛问题,觉得楼主你的代码阅读性对于我来说挺
差
的。我把你的代码复制运行发现没问题,加上我自己的经验,你遇到的问题可能是:你运行时用的命令是:
java MyBufferedReaderDemo.java
javac才是对应有后缀名.java的。
怎么感觉最近自己老是回答类似问题.......
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("d:\\Demo.txt");
MyBufferedReader myBuf = new MyBufferedReader(fr);
String line = null;
while((line=myBuf.myReadLine())!=null)
{
System.out.println(line);
}
myBuf.myClose();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2