黑马程序员技术交流社区
标题: IO中的一个问题 [打印本页]
作者: 李万海 时间: 2013-3-31 09:17
标题: IO中的一个问题
本帖最后由 李万海 于 2013-3-31 20:32 编辑
- import java.io.*;
- class MyBufferedReader //extends Reader//自定义装饰类,模拟BufferedReader
- {
- private Reader r;
- MyBufferedReader(Reader r)
- {
- this.r = r;
- }
- //读一行的方法。
- public String myReadLine()throws IOException
- {
- 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 Demo
- {
- public static void main(String[]args)throws IOException
- {
- MyBufferedReader mybr=new MyBufferedReader(new FileReader("ceshi.java"));
- BufferedWriter bufw=new BufferedWriter(new FileWriter("F:\\ooo.java"));
- String s=null;
- while((s=mybr.myReadLine())!=null)
- {
- bufw.write(s);
- bufw.flush();
- bufw.newLine();
- }
-
- }
- }
复制代码这个是老师的例题,我传入的ceishi.java也就是普通的一个java文件,问题是sb.toString()到底吧\t和\n放到StringBuilder里面没,
我理解是当读到\t的时候,退出本次循环,读下一个\n,这时符合if(ch=='\n')的条件,toString了,我理解错了没?
第二个问题是,return sb.toString();这里StringBuilder里并没有清空啊,前面的数据应该都在里面的啊,
复制应该重复的,可事实没有,我哪里理解错了?
作者: 刘胜寒 时间: 2013-3-31 09:27
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;//跳出本次循环 ,再继续 执行while((ch=r.read())!=-1){};所以 ch 没有添加加到sb中
if(ch=='\n')//结束本次循环 所以ch也没有添加到sb中
return sb.toString();
else
sb.append((char)ch);//这个你懂的 是添加到sb中去了
}
第二个疑问
while((s=mybr.myReadLine())!=null)
{
bufw.write(s);
// bufw.write(s);每次都要新建一个StringBuilder 相当于每次sb都是一个空的,你可以在myReadLine()函数中添加一条打印语句放在放在int ch=0s上面。。
bufw.flush();
bufw.newLine();
}
作者: 齐静 时间: 2013-3-31 11:09
1.s=mybr.myReadLine() 是每次只读取一行数据,到\n时返回。 返回时无行分隔符\r\n。所以在写入时需要bufw.newLine() 再写入一个行分隔符
2.每次执行s=mybr.myReadLine() 时 在myReadLine() 方法中都会重新执行StringBuilder sb = new StringBuilder(); 创建一个新的StringBuilder对象。
myReadLine()方法是每次读取一行之后赋给s写入到bufw中,由bufw自行写入换行符。依次循环直到文件结尾
作者: 陈丽莉 时间: 2013-3-31 18:47
若还有问题,请继续追问~ 没有的话,请将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |