目录
LineNumberReader:此类是带有行号的缓冲字符输入流。
此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号:
int getLineNumber():获得当前行号。
void setLineNumber(int lineNumber):设置当前行号。
示例
import java.io.*;
class LineNumberReaderDemo{
public static void main(String[] args)throws IOException{
FileReader fr=new FileReader("PersonDemo.java");
LineNumberReader lnr = new LineNumberReader(fr);
String line=null;
lnr.setLineNumber(100);
while((line=lnr.readLine())!=null){
System.out.println(lnr.getLineNumber()+":"+line);
}
lnr.close();
}
}
自定义带行号的缓冲区对象
class MyLineNumberReader{
private Reader r;
private int lineNumber;
MyLineNumberReader(Reader r){ // 多态,提高扩展性
this.r=r;
}
public String myReadLine()throws IOException{
lineNumber++;
StringBuilder sb=new StringBuilder();
int ch=0;
while((ch=r.read())!=-1){
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
public void setLineNumber(int lineNumber){
this.lineNumber=lineNumber;
}
public int getLineNumber(){
return lineNumber;
}
public void myClose()throws IOException{
r.close();
}
}
class MyLineNumberReaderDemo{
public static void main(String[] args)throws IOException{
FileReader fr=new FileReader("copyTextByBuf.java");
MyLineNumberReader mylnr=new MyLineNumberReader(fr);
String line=null;
mylnr.setLineNumber(100);
while((line=mylnr.myReadLine())!=null){
System.out.println(mylnr.getLineNumber()+":"+line);
}
mylnr.myClose();
}
}
优化自定义带行号缓冲区装饰类代码
// 利用现有资源进行代码优化
class MyLineNumberReader extends MyBufferedReader{
private int lineNumber;
MyLineNumberReader(Reader r){
super(r); // 调用父类赋值
}
public String myReadLine()throws IOException{
lineNumber++;
return super.myReadLine();
}
public void setLineNumber(int lineNumber){
this.lineNumber=lineNumber;
}
public int getLineNumber(){
return lineNumber;
}
}
class MyLineNumberReaderDemo{
public static void main(String[] args)throws IOException{
FileReader fr=new FileReader("copyTextByBuf.java");
MyLineNumberReader mylnr=new MyLineNumberReader(fr);
String line=null;
mylnr.setLineNumber(100);
while((line=mylnr.myReadLine())!=null){
System.out.println(mylnr.getLineNumber()+":"+line);
}
mylnr.myClose();
}
}