今天看毕老师讲了MyGetLineNumber(), 课后练习是自己写代码实现MyGetLineNumber()方法, 然后自己写了一遍, 一开始就是一个单纯的计数器, 每次写入换行的时候在行开头打印该计数器. 完全和行没有什么关系. 只要调用一次就行数+1;
看了毕老师的答案后, 修改为重写BufferedReader类中的readLine()方法, 每次调用readLine()方法时, 行数+1; 这样就比较科学了.
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
class MyLineNumberReader extends BufferedReader{
private Reader fr;
private int line = 0;
MyLineNumberReader(Reader fr){
super(fr);
}
@Override
public String readLine() throws IOException {
// TODO Auto-generated method stub
line++; //每次调用读行的时候, 行数+1;
return super.readLine();
}
int MyGetLineNumber() throws IOException{
// fr.readLine(); //之前自己写的计数器, 还假惺惺的调用了readLine(), 调试发现根本就是一点用都没有, 直接line++就足够了.
// line++; //之前自己写的计数器, 每次调用MyGetLineNumber()之后line+1, 完全就是单纯的自增, 完全和readline脱离关系了, 不科学.
//看了视频后, 修改为重写readLine(),在每次调用readLine()时,line+1
return line;
}
void MySetLineNumber(int line_from){
this.line=line_from-1; //接受输入值来设定lineNumber从哪开始, 输入100就从100开始, 不应该从101开始; 无所谓的事情, 不要在意这些细节;
}
}
public class MyLineNumberReaderDemo {
/**
* @author liuyue
* @param args
*/
//调用MyLineNumberReader类过程, 不必多说.
public static void main(String[] args) {
// TODO Auto-generated method stub
MyLineNumberReader mlnr = null;
FileReader fr = null;
try {
fr = new FileReader("D:\\123.txt");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mlnr= new MyLineNumberReader(fr);
try {
// mlnr.MySetLineNumber(100);
String lineText=null;
while((lineText=mlnr.readLine())!=null){
System.out.println(mlnr.MyGetLineNumber()+" "+lineText);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
mlnr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}