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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 游呤人 中级黑马   /  2015-7-18 01:21  /  542 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
@SuppressWarnings("all")
/*
*自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
*让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时
*,定义一个开关当开关开启时能够在读取的每行前面都加上有行号,当关闭时就不在显示
*
* */
public class MyReader {
        private String pathName;  //路径名
        private Reader read;    //字符阅读流
        private boolean lineNumber;  //行号开关
        private MyReader(){}
        public MyReader(Reader reader) throws FileNotFoundException{
                this(null,reader,false);
        }
        public MyReader(String pathName) throws FileNotFoundException{
                this(pathName,null,false);
        }
       
        public MyReader(Reader reader,boolean lineNumber) throws FileNotFoundException{
                this(null,reader,lineNumber);
        }
        private MyReader(String pathName,Reader read,boolean lineNumber) throws FileNotFoundException{
                if(read==null&&pathName==null){     //字符流为空,或者pathName为空都无法创建此流
                        throw new NullPointerException("pathName or read is Null");
                }else if(pathName!=null){
                        this.read=new FileReader(pathName);  
                        this.lineNumber=lineNumber;
                }else{
                        this.read=read;
                        this.lineNumber=lineNumber;
                }
        }
        public void setLineNumbr(boolean lineNumber){
                this.lineNumber=lineNumber;               
        }
       
        private String readLine() throws IOException{
                int buff=0;
                StringBuilder strbuff=new StringBuilder();  //开始阅读一行数据.
                while((buff=read.read())!=-1){
                        if(buff=='\r'){
                                continue;       
                        }
                        if(buff=='\n'){
                                return strbuff.toString();
                        }
                        strbuff.append((char)buff);
                }
                return null;
        }
        public String[] readFile()  {  //读取整个文件
                int num=1;
                String line="";
                ArrayList<String> list=new ArrayList<String>();
                try {
                        while((line=readLine())!=null){
                                list.add(line);                       
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return list.toArray(new String[list.size()]);
        }
        public void cat(){ //显示
                String[] st=readFile();
                int i=0;
                for (String string : st) {
                        if(lineNumber)
                                System.out.println(++i+":\t"+string);
                }
                try {
                        close();
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        public void close() throws Exception{ //关闭流
                read.close();       
        }
        public static void main(String[] args) {
                try {
                        MyReader myReader=new MyReader(new FileReader("/home/cys/Triangle.java"),true);
                //        myReader.setLineNumbr(true);
                        myReader.cat();
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马