0
点赞
收藏
分享

微信扫一扫

IO流_自定义类模拟LineNumberReader的获取行号功能案例

花海书香 2022-07-27 阅读 46


package cn.itcast_09;

import java.io.IOException;
import java.io.Reader;

public class MyLineNumberReader {
private Reader r;
private int lineNumber = 0;

public MyLineNumberReader(Reader r) {
this.r = r;
}

public int getLineNumber() {
return lineNumber;
}

public void setLineNumber(int lineNumber) {
this.lineNumber = lineNumber;
}

public String readLine() 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 close() throws IOException {
this.r.close();
}
}


package cn.itcast_09;

import java.io.FileReader;
import java.io.IOException;

/*
* 测试MyLineNumberReader类
*/
public class MyLineNumberReaderTest {
public static void main(String[] args) throws IOException {
// MyLineNumberReader mlnr = new MyLineNumberReader(new FileReader(
// "my.txt"));
MyLineNumberReader2 mlnr = new MyLineNumberReader2(new FileReader(
"my.txt"));

// mlnr.setLineNumber(10);

String line = null;
while ((line = mlnr.readLine()) != null) {
System.out.println(mlnr.getLineNumber() + ":" + line);
}

// 释放资源
mlnr.close();
}
}



终级代码

package cn.itcast_09;

import java.io.IOException;
import java.io.Reader;

import cn.itcast_08.MyBufferedReader;

public class MyLineNumberReader2 extends MyBufferedReader {
private Reader r;
private int lineNumber = 0;

public MyLineNumberReader2(Reader r) {
super(r);
}

public int getLineNumber() {
return lineNumber;
}

public void setLineNumber(int lineNumber) {
this.lineNumber = lineNumber;
}

@Override
public String readLine() throws IOException {
lineNumber++;
return super.readLine();
}
}



举报

相关推荐

0 条评论