Java基础之IO流,按指定行号范围读取文本文件内容,带行业、带缓冲

import java.io.*;

class MyReaderLineNumberDemo
{
    public static void main(String[] args)
    {
        MyReaderForLineNumber mrln = null;
        try
        {
            mrln = new MyReaderForLineNumber("MyReaderLineNumberDemo.java");
        
            String line = null;
            mrln.setStartLineNumber(1);
            mrln.setEndLineNumber(-1);
            while((line=mrln.readLine())!=null)
            {
                System.out.println(mrln.getLineNumber() +":"+ line);
            }
        }
        catch(IOException e)
        {
            System.err.println(e.getMessage());
        }
        finally
        {
            try
            {
                if(null!=mrln)
                    mrln.close();
            }
            catch(IOException e)
            {
                System.err.println(e.getMessage());
            }
        }
    }
}

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

class MyReaderLineNumber extends MyBufferedReader
{
    private int lineNumber = 0;
    
    public MyReaderLineNumber(String fileName)  throws IOException
    {
        super(fileName);
    }
    
    public String readLine()  throws IOException
    {
        lineNumber++;
        return super.readLine();
    }
    
    public void setLineNumber(int lineNumber)
    {
        this.lineNumber = lineNumber;
    }
    
    public int getLineNumber()
    {
        return lineNumber;
    }
}

class MyReaderForLineNumber extends MyReaderLineNumber
{
    private int startLineNumber = 0;
    private int endLineNumber = Integer.MAX_VALUE;
    
    public MyReaderForLineNumber(String fileName) throws IOException
    {
        super(fileName);
    }
    
    public String readLine()  throws IOException
    {    
        String result = null;
        while((result=super.readLine())!=null)
        {
            if(super.getLineNumber()>=this.startLineNumber && this.endLineNumber>=super.getLineNumber())
                return result;
        }
        
        return null;
    }
    
    public int getStartLineNumber()
    {
        return this.startLineNumber;
    }
    
    public void setStartLineNumber(int s)
    {
        if(s>=0)
            this.startLineNumber = s;
    }
    
    public int getEndLineNumber()
    {
        return this.endLineNumber;
    }
    
    public void setEndLineNumber(int e)
    {
        if(e>0)
            this.endLineNumber = e;
        
    }
}
原文地址:https://www.cnblogs.com/cxmsky/p/2886379.html