黑马程序员技术交流社区
标题:
自定义字符输入流的包装类,通过这个包装类对底层字符...
[打印本页]
作者:
dingl
时间:
2015-8-29 21:41
标题:
自定义字符输入流的包装类,通过这个包装类对底层字符...
自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装, 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
public class Test {
public static void main(String[] args){
File fi = new File("Test6.java");//创建对象指向当前工程根目录的Test6.java文件
String str = "null";//初始化文件每行的字符串
try {
MyFile mf = new MyFile(new FileReader(fi));//创建MyFile类对象读取fi
mf.setLineNum(0);//初始化第一行为0
//当每行内容不为空时加入行号和冒号
while((str=mf.readeLine())!=null){
System.out.println(mf.getLineNum()+":"+str);
}//没有文件或打开错误抛出异常
} catch (Exception e) {
e.printStackTrace();
}
}
}
//创建我的文件类来读取指定的文件
class MyFile{
//定义行号,创建Reader来读取内容
private int lineNum;
private Reader rd;
//初始化构造函数
MyFile(Reader rd) {
this.rd = rd;
}
public String readeLine()throws Exception{
lineNum++;//行数叠加读取
StringBuilder sb = new StringBuilder();//StringBuilder容器存储每行的内容
int x=0;
//判断该行是否有内容并存储
while((x=rd.read())!=-1){
if(x=='\r')
continue;
if(x=='\n')
return sb.toString();
sb.append((char)x);
}
//若sb的长度不为0则返回字符串,否则返回空
if(sb.length()!=0)
return sb.toString();
return null;
}
//主函数设置和获取行号
public int getLineNum(){
return lineNum;
}
public void setLineNum(int lineNum){
this.lineNum=lineNum;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2