----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------
LineNumberReader是BufferedReader的子類
此類定義了方法 setLineNumber(int)和 getLineNumber()它們可分別用於設置和獲取當前行號。
默認情況下,行編號從 0 開始。該行號隨數據讀取在每個行結束符處遞增,並且可以通過調用 setLineNumber(int)
更改行號。但要注意的是,setLineNumber(int)
不會實際更改流中的當前位置;它只更改將由getLineNumber() 返回的值。
其實LinrNumber的實現原理就是在LineReader中定義一個計數器,當每次調用readLine時遞增計數器即可。具體的實現代碼如下。
public class MyLineNumberReader {
private Reader r;
private static int lineNumber=0;//定義默認行號
public static void main(String[] args) {
String str = null;
try {
MyLineNumberReader numberReader = new MyLineNumberReader(new FileReader("E:\\class\\8-10.txt"));
while((str=numberReader.MyReadLine())!=null){
System.out.println(str);
}
} catch (IOException e) {
throw new RuntimeException("文件讀取失敗");
}
}
MyLineNumberReader(Reader r){
this.r = r;
}
public String MyReadLine() throws IOException{
int ch =0;
StringBuilder str = new StringBuilder();
while((ch=r.read())!=-1){
if(ch=='\r')
continue;
if(ch=='\n'){
setLineNumber(++lineNumber);//返回每行的數據前設置行號改變
return getLineNumber()+str.toString();
}
else
str.append((char)ch);
}
if(str.length()!=0)
return str.toString();
return null;
}
public void MyClose() throws IOException{
r.close();//定義自己的close()方法,因爲是自己調用父類的myclose()所以實際程序中就不需要對Reader()對象關閉了。
}
public int getLineNumber(){
return lineNumber;
}
public void setLineNumber(int lineNumber){
this.lineNumber = lineNumber;
}
}
----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------