------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
/*
* 自定义缓冲区,装饰类,装饰FileReader,实现读取一行
*/
import java.io.*;
public class MyBufferedReaderDemo {
// 装饰哪一个流对象,不清楚,定义成员变量,参数传递实现
private Reader r;
public MyBufferedReaderDemo(Reader r) {
this.r = r;
}
// 定义读取一行的方法,增强原有Reader类的方法read()
public String myReadLine() throws IOException {
// 建立一个字符串缓冲区对象,存储读取到的有效字符
StringBuilder builder = new StringBuilder();
int len = 0;
while ((len = r.read()) != -1) {
// 判断len是不是 \r
if (len == '\r')
// 这是一个无效字符,不要,继续让read()向后读取
continue;
// 判断len是不是\n
if (len == '\n')
// 这一行,已经结束了,将缓冲区中的内容变成String返回
return builder.toString();
// len不是\r也是不\n这是一个有效字符,字符存储到缓冲区
builder.append((char) len);
}
// 判断缓冲去中,是否还有字符,如果有返回字符,如果没有返回null
if (builder.length() != 0)
return builder.toString();
return null;
}
// 提供关闭资源方法
public void close() throws IOException {
r.close();
}
}
/*
* 测试自己写的readLine功能
*/
import java.io.*;
public class MyReaderLineTest {
public static void main(String[] args) throws IOException {
// 建立自己的MyBufferedReaderDemo对象,构造方法中,传递FileReader
MyBufferedReaderDemo bfrd = new MyBufferedReaderDemo(new FileReader(
"c:\\1.txt"));
String line = null;
while ((line = bfrd.myReadLine()) != null) {
System.out.println(line);
}
bfrd.close();
}
}