黑马程序员技术交流社区
标题:
【分享题目】自定义字符输入流的包装类
[打印本页]
作者:
小丑
时间:
2015-7-19 11:16
标题:
【分享题目】自定义字符输入流的包装类
自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装, 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时, 能够在读取的每行前面都加上有行号和冒号。
不知道大家有没有更好的方法做这个题目。
package com.hkddy8.test1;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/*
* 1: 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装, 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,
*
* 能够在读取的每行前面都加上有行号和冒号。
*
*/
public class Test1 {
public static void main(String[] args) throws IOException {
File file = new File("Test1.java");
MyLineNumberReader m = new MyLineNumberReader(new FileReader(file));
String line = null;
while((line=m.readLine())!=null){
System.out.println(line);
}
m.close();
}
}
class MyLineNumberReader{
private Reader read;
private int lineNumber;
MyLineNumberReader(Reader read){
this.read = read;
}
public String readLine() throws IOException{
StringBuffer sb = new StringBuffer();
int num = 0;
// 调用底层输入流读取
while((num=read.read())!=-1){
// 判断换行符
if(num=='\r'){
continue;
}else if(num=='\n') {
// 如果换行 则行号++
lineNumber++;
// 返回 加行号后的数据
return addLineNumber(sb.toString());
}else{
// 如果没有判断到换行就一直追加数据
sb.append((char)num);
}
}
// 读取最后一行,因为最后一行可能不满
if(sb.length()>0){
return ++lineNumber+": "+sb.toString();
}
return null;
}
// 加入行号方法
private String addLineNumber(String string) {
return lineNumber+": "+string;
}
// 关闭资源方法
public void close() throws IOException{
read.close();
}
}
复制代码
作者:
a12366456
时间:
2015-7-19 14:51
也是这么写的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2