/*
* 1、定义一个类,实现与被增强对象相同的接口(继承被增强对象)
* 2、定义一个变量,记住被增强对象
* 3、定义一个构造函数,接收被增强对象
* 4、覆盖要增强的方法
* 5、对于不需要增强的方法,调用被增强对象原有的方法
* 1、定义一个类,实现与被增强对象相同的接口(继承被增强对象)
* 2、定义一个变量,记住被增强对象
* 3、定义一个构造函数,接收被增强对象
* 4、覆盖要增强的方法
* 5、对于不需要增强的方法,调用被增强对象原有的方法
*/
package com.xiaozhi.io;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Test {
public static void main(String[] args) throws IOException {
MyBufferedReader mybufferReader=new MyBufferedReader(new FileReader("c:\\jingtianxiaozhi.txt"));
String line=null;
while((line=mybufferReader.myRead())!=null)
{
System.out.println(line);
}
mybufferReader.close();
}
}
class MyBufferedReader extends Reader{
FileReader fileReader;
public MyBufferedReader(FileReader fileReader) {
this.fileReader = fileReader;
}
public String myRead() throws IOException
{
int c=0;
StringBuilder builder=new StringBuilder();
while((c=fileReader.read())!=-1 && c!='\r'){
if(c == '\n')
continue;
builder.append((char)c);
}
if(c== -1)
return builder.toString().length()==0 ? null : builder.toString();//最后一行没有回程换行
return builder.toString();
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException
{
return fileReader.read(cbuf, off, len);
}
@Override
public void close() throws IOException
{
fileReader.close();
}
}
增强BufferedReader的readLine方法,在输出内容时加上行号
package package1;
import java.io.BufferedReader;
import java.io.IOException;
public class MyBufferedReader extends BufferedReader
{
private BufferedReader bufferedReader;
private int linenum = 1;
public MyBufferedReader(BufferedReader bufferedReader){
super(bufferedReader);
this.bufferedReader=bufferedReader;
}
@Override
public String readLine() throws IOException
{
String value=bufferedReader.readLine();
if(value==null)
return null;
return linenum++ + value;
}
}
继承方式
package com.itheima.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
public class MyBufferedReader extends BufferedReader{
private int num;
public MyBufferedReader(Reader in){
super(in);
}
@Override
public String readLine() throws IOException {
String value = readLine();
if(value==null)
return value;
return num+++readLine();
}
}