MyLineNumberReader

本文介绍了一个自定义的Java字符输入流包装类MyLineNumberReader。该类用于读取文本文件时,在每一行前自动添加行号和冒号。通过对原始FileReader的封装,实现了在读取文件时按需格式化输出的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 package com.itheima;
 2 
 3 import java.io.FileReader;
 4 import java.io.IOException;
 5 import java.io.Reader;
 6 
 7 public class Test06 {
 8 
 9     /**
10      * 需求:
11      * 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
12      * 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,
13      * 能够在读取的每行前面都加上有行号和冒号
14      * @param args
15      */
16     public static void main(String[] args) throws IOException
17     {
18         //创建流对象并关联文件
19         FileReader fr = new FileReader("Test01.java");
20         //对流进行包装
21         MyLineNumberReader mylnr = new MyLineNumberReader(fr);
22         
23         String line = null;
24         //读取一行记录一行
25         while((line=mylnr.myReadLine())!=null)
26         {
27             System.out.println(mylnr.getLineNumber()+":"+line);
28         }
29         //关流
30         mylnr.myClose();
31     }
32 }
33 
34 
35 class MyLineNumberReader 
36 {
37     //定义流对象
38     private Reader r;
39     private int lineNum;
40     //传入被装饰对象
41     MyLineNumberReader(Reader r)
42     {
43         this.r = r;
44     }
45     //对外提供方法
46     public String myReadLine()throws IOException
47     {
48         //读取一行就自增一次
49         lineNum++;
50         //自定义缓冲区
51         StringBuilder sb = new StringBuilder();
52 
53         int ch = 0;
54         //不为空一直读取
55         while((ch=r.read())!=-1)
56         {
57             if(ch=='\r')//判断标记
58                 continue;
59             if(ch=='\n')
60                 return sb.toString();
61             else
62                 sb.append((char)ch);//将读取到的字符添加到缓冲区
63         }
64         //判断缓冲区是否为空
65         if(sb.length()!=0)
66             return sb.toString();//不为空继续返回里面内容
67         return null;
68     }
69     public void setLineNumber(int lineNum)
70     {
71         this.lineNum = lineNum;
72     }
73     public int getLineNumber()
74     {
75         return lineNum;
76     }
77     //对外提供关闭流的方法
78     public void myClose()throws IOException
79     {
80         r.close();
81     }
82 }
83  

 

转载于:https://www.cnblogs.com/wtyqer/p/3527714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值