Java基础之IO流,装饰设计模式的应用之行号、缓冲读取文本文件

import java.io.*;
class MyReaderLineNumberDemo
{
    public static void main(String[] args) throws IOException
    {
        MyReaderLineNumber mrln = new MyReaderLineNumber("MyReaderLineNumberDemo.java");
        
        String line = null;
        mrln.setReaderLineNumber(100);
        while((line=mrln.readerLine())!=null)
        {
            System.out.println(mrln.getReaderLineNumber() +"\t"+line);
        }
        mrln.close();
    }
}

class MyBufferedReader
{
    private FileReader fileReader = null;
    
    public MyBufferedReader(String fileName) throws IOException
    {
        fileReader = new FileReader(fileName);
    }
    
    public String readerLine() throws IOException
    {
        StringBuilder sb = new StringBuilder();
        int ch = 0;
        
        while((ch = fileReader.read())!=-1)
        {
            if(ch == '\r')
                continue;
            else if(ch == '\n')
                return sb.toString();
            else
                sb.append((char)ch);
        }
        
        if(sb.length()!=0)
            return sb.toString();
            
        return null;
    }
    
    public void close() throws IOException
    {
        fileReader.close();
    }
}

class MyReaderLineNumber extends MyBufferedReader
{
    private int readerLineNumber = 0;
    public MyReaderLineNumber(String fileName) throws IOException
    {
        super(fileName);
    }
    
    public String readerLine() throws IOException
    {        
        readerLineNumber++;
        return super.readerLine();
    }
    
    public int getReaderLineNumber()
    {
        return this.readerLineNumber;
    }
    
    public void setReaderLineNumber(int readerLineNumber)
    {
        this.readerLineNumber = readerLineNumber;
    }    
}
原文地址:https://www.cnblogs.com/cxmsky/p/2883087.html