自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装, 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时, 能够在读取的每行前面都加上有行号和冒号。
不知道大家有没有更好的方法做这个题目。
- package com.hkddy8.test1;
- import java.io.File;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.Reader;
- /*
- * 1: 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装, 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,
- *
- * 能够在读取的每行前面都加上有行号和冒号。
- *
- */
- public class Test1 {
- public static void main(String[] args) throws IOException {
- File file = new File("Test1.java");
- MyLineNumberReader m = new MyLineNumberReader(new FileReader(file));
- String line = null;
- while((line=m.readLine())!=null){
- System.out.println(line);
- }
- m.close();
- }
- }
- class MyLineNumberReader{
-
- private Reader read;
-
- private int lineNumber;
-
- MyLineNumberReader(Reader read){
- this.read = read;
- }
-
-
- public String readLine() throws IOException{
-
- StringBuffer sb = new StringBuffer();
- int num = 0;
- // 调用底层输入流读取
- while((num=read.read())!=-1){
- // 判断换行符
- if(num=='\r'){
- continue;
- }else if(num=='\n') {
- // 如果换行 则行号++
- lineNumber++;
- // 返回 加行号后的数据
- return addLineNumber(sb.toString());
- }else{
- // 如果没有判断到换行就一直追加数据
- sb.append((char)num);
- }
- }
- // 读取最后一行,因为最后一行可能不满
- if(sb.length()>0){
- return ++lineNumber+": "+sb.toString();
- }
-
- return null;
- }
- // 加入行号方法
- private String addLineNumber(String string) {
- return lineNumber+": "+string;
- }
-
- // 关闭资源方法
- public void close() throws IOException{
- read.close();
- }
- }
复制代码
|
|