黑马程序员技术交流社区
标题:
关于IO流缓冲区自定义readLine方法的问题
[打印本页]
作者:
无气打火机
时间:
2013-7-21 22:26
标题:
关于IO流缓冲区自定义readLine方法的问题
本帖最后由 无气打火机 于 2013-7-22 18:00 编辑
import java.io.*;
class MyBufferedReader {
FileReader r;
MyBufferedReader(FileReader r) {
this.r=r;
}
//可以一次读一行数据的方法。
public String myReadeLine() throws IOException{
//定义一个临时容器,原Bufferedreader封装的是字符数组。
//为了演示方便,定义一个StringBuffer容器,因为最终还是要将数据变成字符串
StringBuffer sb = new StringBuffer();
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("e:\\buf.txt");
MyBufferedReader mbd = new MyBufferedReader(fr);
String line=null;
while((line=mbd.myReadeLine())!=null) {
System.out.println(line);
}
mbd.myClose();
}
}
复制代码
这道题我足足想了好几天了,实在想不出来为什么啊
作者:
张洪慊
时间:
2013-7-21 22:47
while((ch=r.read())!=-1){
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
/*
上面那个循环的含义:
未读到\r\n之前,所有字符被添加到StringBuilder中
一旦读到\r\n返回当前行的字符串
*/
if(sb.length()!=0) {
return sb.toString();
}
/*
这个判断目的:
如果文件最后一行没有回车(\r\n)
那么上面的while执行完后最后一行数据添加到了StringBuilder中
但是无法return
*/
复制代码
作者:
杨增坤
时间:
2013-7-21 22:54
String line=null;
while((line=mbd.myReadeLine())!=null) {
System.out.println(line);
}
1.因为当调用myReadeLine()方法是,你在键盘的在同一行的话,在这个mbd.myReadeLine()中执行循环进行字符连接,知道你按回车键('\r\n')后,这个方法你前面在键盘上输入的数据,执行 return sb.toString()此时这个方法结束
2.然后执行 while((
line=mbd.myReadeLine())
!
=null) {
System.out.println(line);
}只要一调用myReadeLine()方法,就行重新初始化StringBuffer sb = new StringBuffer();此时sb变量存的是空的。然后在继续存储你输入的信息,知道你按回车然会你读取键盘的信息,这样这个方法就又结束了,
希望你能懂,希望对你有帮助!
作者:
无气打火机
时间:
2013-7-22 17:59
forward 发表于 2013-7-21 22:54
String line=null;
while((line=mbd.myReadeLine())!=null) {
Sy ...
谢谢,终于知道了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2