自定义类模拟LineNumberReader的特有功能,获取每次读取数据的行号
LineNumberReader的特有功能有:
- int getLineNumber():获得当前行号。
- void setLineNumber(int lineNumber):设置当前行号。
代码如下:
public class MyLineNumberReader {
private Reader r;
private int lineNmber = 0;
public MyLineNumberReader(Reader r) {
this.r = r;
}
public int getLineNmber() {
return lineNmber;
}
public void setLineNmber(int lineNmber) {
this.lineNmber = lineNmber;
}
public String readLine() throws IOException {
lineNmber++; //当读取每一行数据时,相应的行数加一
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) { // 为防止数据丢失,判断sb的长度是否大于0
return sb.toString();
}
return null;
}
public void close() throws IOException {
this.r.close();
}
}