IO流_LineNumberReader

		FileReader fr = new FileReader("d:\\buf.txt");
		
		LineNumberReader lnr = new LineNumberReader(fr);
		//LineNumberReader是BufferedReader的子類
		//此類定義了方法 setLineNumber(int) 和 getLineNumber(),它們可分別用於設置和獲取當前行號。
		String line = null;
		
		//lnr.setLineNumber(100);
		while((line=lnr.readLine())!=null){
			System.out.println(lnr.getLineNumber()+":"+line);
		}
		
		lnr.close();
	        }
Test:
/*
自定義字符輸入流的包裝類,通過這個包裝類對底層字符輸入流進行包裝,
讓程序通過這個包裝類讀取某個文本文件(例如,一個java源文件)時,
能夠在讀取的每行前面都加上有行號和冒號。

思路:創建一個類,並且創建相應的方法
	 通過創建一個StringBuilder來作爲緩衝區
	 添加一個計數器來輸出linenumber
*/
class MyLineNumberReader
{
       private Reader r;//定義讀取流
       int lineNum=0;//定義行號
      
       MyLineNumberReader( Reader r )//構造方法,初始化就有流和行號兩個屬性
       {
              this.r=r;
              lineNum=0;
       }
      
       public String readLine() throws Exception
       {
              StringBuffer sb=new StringBuffer();//使用緩衝區,臨時存儲讀取的字符
              int ch=0;//爲什麼要定義成int型,因爲read方法返回的是字符,可以用ASCII碼錶示,所以用int型接收
              while( (ch=r.read())!=-1 )
              {
                     if( ch=='\r')
                            continue;
                     else if( ch=='\n')
                     {
                            lineNum++;
							//定義一個方法addLineNum,遇到換行直接就返回 行號+字符串
                            return addLineNum( sb.toString() );

                           
                     }
                     else
                     {
                            sb.append((char)ch);
                     }
                          
              }
			  
			  
			  //這裏的if判斷的目的是什麼?
              if( sb.length()>0 )//這裏應該是length()屬性不是length方法
              {					//如果緩衝區的長度!= 0就 返回緩衝區中的字符串
                     return sb.toString();
				
              }
              return null;
       }
      
       public String addLineNum( String s )
       {
              return lineNum+": "+s;
       }
      
       public void close()  throws Exception//爲什麼關閉流還要搞個方法?
       {
              r.close();
       }
}
 
class Demo
{
       public static void main(String args[]) throws Exception
       {
              MyLineNumberReader my=new MyLineNumberReader( new FileReader("upLoadTxt.java"));
              String s=null;
              while( (s=my.readLine())!=null )
              {
                     System.out.println( s );
              }
       }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章