模拟一个带行号的缓冲区对象

/*模拟一个带行号的缓冲区对象(myLineNumberReader):注:LineNumberReader是BufferedReaderd的子类都是装饰类。
 * 实现功能:读一行,将行号连内容都打印,并行号可设置
 * 思路:1.建立自己的装饰类(是Reader体系的装饰类),使用装饰类的写法:构造函数将被装饰类对象传入。在被装饰类已有的功能上扩展功能
 * 2.类比LineNumberReader,这里要在Reader基础上扩展的特有方法是ReadLine()、getLineNumber()、setLineNumber(int num )、close()四个方法
 * */


package demo;
import java.io.*;
class Demo{
public static void main(String [] args)throws IOException
{
FileReader fr=new FileReader("abc.txt");
myLineNumberReader lnr=new myLineNumberReader(fr);
lnr.mySetLineNumber(100);
String line=null;
while((line=lnr.myReadLine())!=null){
System.out.println(lnr.myGetLineNumber()+":"+line);
}
lnr.myclose();
}
}


 class myLineNumberReader 
 {
private Reader r;
private int num;
myLineNumberReader(Reader r){
this.r=r;
}
 
public String myReadLine(){
StringBuilder sb=new StringBuilder();
int ch=0;
try {
while((ch=r.read())!=-1){
if(ch=='\r'){
continue;
}
if(ch=='\n'){
num++;
return sb.toString();
}else{
sb.append((char)ch);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(sb.length()!=0){//最后一行没有\r\n,也就没有判断到\n,但是数据存入了sb,所以要另加判断。
num++;
      return sb.toString();
}
return null;
}
public int myGetLineNumber(){
return this.num;
}
public void mySetLineNumber(int num ){
this.num=num;
}
public void myclose(){
try {
r.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

 }




简写:

package demo;
import java.io.*;
class Demo{
public static void main(String [] args)throws IOException
{
FileReader fr=new FileReader("abc.txt");
myLineNumberReader lnr=new myLineNumberReader(fr);

String line=null;
while((line=lnr.myReadLine())!=null){
System.out.println(lnr.myGetLineNumber()+":"+line);
}
lnr.close();
}
}


 class myLineNumberReader extends BufferedReader
 {
private Reader r;
private int num;
myLineNumberReader(Reader r){
super(r);
}
 
public String myReadLine() throws IOException{
num++;
return super.readLine();
}
public int myGetLineNumber(){
return this.num;
}
public void mySetLineNumber(int num ){
this.num=num;
}

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值