自定义MyLineNumberReader类实现LineNumberReader类工作原理

import java.io.*;

class MyLineNumberReader

 //先包装一个Reader,必须要先有流对象,用流对象去读数据,它才能对数据进行行号的添加
 private Reader r;
 private int lineNumber;

 //同时在构造函数中将被包装的对象传进来
 MyLineNumberReader(Reader r) //Reader r是被装饰的对象
 {
  this.r = r;
 }

 public String myReadLine() throws IOException
 {
  lineNumber++;//myReadLine方法读一次,行号计数器就会自增一次

  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;
 }

 public void setLineNumber(int lineNumber) throws IOException
 {
  this.lineNumber = lineNumber;
 }

 public int getLineNumber()
 {
  return lineNumber;
 }

 public void myClose() throws IOException
 {
  r.close();
 }

}

class MyLineNumberReaderDemo
{
 public static void main(String[] args) throws IOException
 {
  FileReader fr = new FileReader("PersonDemo.java");

  MyLineNumberReader mylnr = new MyLineNumberReader(fr);

  String line = null;
  
  while((line=mylnr.myReadLine())!=null)
  {
   System.out.println(mylnr.getLineNumber()+"::"+line);
  }

  mylnr.myClose();
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值