package string.test;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;
/*
* LineNumberReader
* 跟踪行号的缓冲字符输入流。此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。
*/
public class LineNumberReaderDemo {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("demo.txt");
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < 100; i++) {
bw.write("zhangsanailisi" + i);
bw.newLine();
bw.flush();
}
FileReader fr = new FileReader("demo.txt");
//java提供的
/*
* LineNumberReader lbr = new LineNumberReader(fr); String line = null;
* while ((line = lbr.readLine()) != null) {
*
* System.out.println(lbr.getLineNumber() + "." + line); } bw.close();
* lbr.close();
*/
//自定义的MyLineNumberDemo
MyLineNumberDemo mln = new MyLineNumberDemo(fr);
String line = null;
mln.setLineNumber(800);
while ((line = mln.myReadLine()) != null) {
System.out.println(mln.getLineNumber()+"." + line);
}
bw.close();
mln.myClose();
}
}
/*
* 自定义的LineNumberReader
*
*/
class MyLineNumberDemo {
private Reader r;
private int lineNumber = 0;
public MyLineNumberDemo(Reader r) {
this.r = r;
}
public String myReadLine() throws IOException {
lineNumber++;
StringBuilder sb = new StringBuilder();
int i = 0;
while ((i = r.read()) != -1) {
if (i == '\r')
continue;
if (i == '\n')
return sb.toString();
sb.append((char) i);
}
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();
}
}