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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© j420984 中级黑马   /  2015-6-28 14:29  /  280 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

差点就理解错了,这里不能直接调用LineNumberReader!
自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。

package com.jwd.black.exam;

import java.io.*;

public class Exam8 {

        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("f:\\exam8.java");
                MyLineNumberReader lnr = new MyLineNumberReader(fr);
                String line = null;
                while ((line = lnr.myReadLine()) != null) {
                        System.out.println(lnr.getLineNumber() + ":" + line);
                }
                lnr.myClose();
        }
}

class MyLineNumberReader {
        private Reader r;
        private int lineNumber;

        MyLineNumberReader(Reader r) {
                this.r = r;
        }

        public String myReadLine() throws IOException {
                lineNumber++;
                StringBuilder sb = new StringBuilder();
                int ch = 0;
                while ((ch = r.read()) != -1) {
                        if (ch == '\r')
                                continue;
                        if (ch == '\n')
                                return sb.toString();
                        else
                                sb.append((char) ch);
                }
                if (sb.length() != 0)
                        return sb.toString();
                return null;
        }

        public int getLineNumber() {
                return lineNumber;
        }

        public void setLineNumber(int lineNumber) {
                this.lineNumber = lineNumber;
        }

        public void myClose() throws IOException {
                r.close();
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马