/*
自己写的读取行
*/
import java.io.*;
/*
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入。
基于已有的功能,并提供加强功能。
那么定义的该类称为装饰类。
如下面的:MyBufferedReader 对 FileReader 类的 read 方法进行了
功能加强。
装饰类通常会通过构造方法接收被装饰的对象。
并基于被装饰的对象的功能,提供更强的功能。
*/
class MyBufferedReader
{
private FileReader r;
MyBufferedReader(FileReader r)
{
thir.r = r;
}
//一次读一行数据
public String getLine(FileReader fr)throws IOException
{
//定义一个临时的容器,原bufferedReader封装的是字符数组
//为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串。
StringBuilder sb = new StringBuilder();
int ch = 0;
while((ch = r.read()) != -1)
{//读到 \r 并且下个是 \n 时才返回。 这样如果只是读到 \r 就忽略是不是会有误差
if(ch =='\r') //读到 \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("buf.txt");
MyBufferedReader mybuf = new MyBufferedReader(fr);
String line = null;
while((line = mybuf.myReadLine()) !=null)
{
System.out.println(line);
}
mybuf.myClose();
}
}
设计模式:装饰模式
最新推荐文章于 2025-06-30 08:30:00 发布