A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

package com.itheima;

import java.io.File;
import java.io.FileReader;
import java.io.Reader;

/*6、 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
           让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
*/
public class Test6 {

        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;
        }                               
}
您需要登录后才可以回帖 登录 | 加入黑马