黑马程序员技术交流社区
标题:
求解装饰类和LineNumberReader
[打印本页]
作者:
The_king丶
时间:
2014-10-4 10:54
标题:
求解装饰类和LineNumberReader
package IO;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
class MyBufferedLineNumberReader extends LineNumberReader
{
private LineNumberReader lb;
public MyBufferedLineNumberReader(FileReader fr,LineNumberReader lb)
{
super(fr);
this.lb = lb;
}
public String MyReadLine() throws IOException
{
StringBuilder sb = new StringBuilder();
int ch = 0;
while((ch = lb.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 class MyBufferedLineNumberReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("E:\\JAVA\\java视频\\黑马程序员JAVA基础\\19\\ReaderDemocopy.txt");
LineNumberReader lnr = new LineNumberReader(fr);
MyBufferedLineNumberReader mb = new MyBufferedLineNumberReader(fr, lnr);
String str = null;
while((str = mb.MyReadLine())!= null){
System.out.println("line:"+mb.getLineNumber()+":"+str);
}
mb.close();
}
}
复制代码
问题1:装饰类继承了一个没有无参构造的类,我该这样做么?还是有别的方法请不吝指教!
问题2:为什么打印出来的getLineNumber全是0?C:\Users\yy\Desktop
作者:
WakeUp
时间:
2014-10-4 11:17
首先,LineNumberReader继承自BufferedReader,已经加入了缓冲作用,为什么你还要写这么一个类呢?
装饰类的作用是增强这个体系的一些功能,让装饰类继承自体系的父类,这样这个装饰类和他的子类处于同一个层次,子类可以不用为每个子类单独创建这样增强功能的类。
再有,你使用的是你自己写的读取一行内容的方法,在LineNumberReader中,他的readLine方法在读取一行之后会将行号加1,你不使用readLine方法,行号自然不会增加。
作者:
The_king丶
时间:
2014-10-4 11:37
WakeUp 发表于 2014-10-4 11:17
首先,LineNumberReader继承自BufferedReader,已经加入了缓冲作用,为什么你还要写这么一个类呢?
装饰类 ...
看了API,没注意到有readLine方法,原来如此,感谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2