本帖最后由 司懿卓 于 2013-1-31 22:27 编辑
先上代码: 演示代码,直接抛出异常- import java.io.*;
- class MyReadLine
- {
- private FileReader r; //定义全局读取流
- MyReadLine(FileReader 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; // null
- }
- public void myClose() throws IOException
- {
- r.close(); //关闭流资源
- }
- }
- public class MyReadLineDemo
- {
- public static void main(String[] args) throws IOException
- {
- FileReader fr = new FileReader("E:\\JavaTest\\0122\\Demo.java");
- MyReadLine myRead = new MyReadLine(fr);
- String line = null;
- /*while((line = myRead.myReadLine())!= null)
- {
- System.out.println(line);
- }*/
- while(myRead.myReadLine()!= null) // 演示
- {
- String line1 = myRead.myReadLine();
- System.out.println(line1);
- }
- myRead.myClose();
- }
- }
复制代码 此程序是模拟BufferedReader字符流缓冲区的readLine方法的逐行读取.
注释掉的while循环为正常循环.
演示循环为异常循环.
问题: 因为,myRead.myReadLine();方法的返回值是String, 直接和null对比的.
结果输出是跳行输出的,就是隔一行输出一个. 不完整.
注释掉的循环是完整, 这是什么原因造成的呢?
完整输出结果:
abcd1
abcd2
abcd3
abcd4
哈哈 呵呵
嘿嘿 咯咯
异常输出结果:
abcd2
abcd4
嘿嘿 咯咯
-------------------------------------
这个问题不该犯啊...
谢谢楼下几位了.. |
|