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

时间:2022-01-25 21:00:30
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;
        
    }
}