- package com.itheima;
- import java.io.File;
- import java.io.FileReader;
- import java.io.Reader;
- /*5、 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
- 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
- */
- public class Text5 {
- public static void main(String[] args){
- File fi = new File("Text7.java");//创建对象指向当前工程根目录的Text7.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;
- }
- }
复制代码
好像路径有问题,求解 |