package com.itheima;

 import java.io.FileReader;
import java.io.IOException;
import java.io.Reader; public class Test06 { /**
* 需求:
* 自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
* 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,
* 能够在读取的每行前面都加上有行号和冒号
* @param args
*/
public static void main(String[] args) throws IOException
{
//创建流对象并关联文件
FileReader fr = new FileReader("Test01.java");
//对流进行包装
MyLineNumberReader mylnr = new MyLineNumberReader(fr); String line = null;
//读取一行记录一行
while((line=mylnr.myReadLine())!=null)
{
System.out.println(mylnr.getLineNumber()+":"+line);
}
//关流
mylnr.myClose();
}
} class MyLineNumberReader
{
//定义流对象
private Reader r;
private int lineNum;
//传入被装饰对象
MyLineNumberReader(Reader r)
{
this.r = r;
}
//对外提供方法
public String myReadLine()throws IOException
{
//读取一行就自增一次
lineNum++;
//自定义缓冲区
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 void setLineNumber(int lineNum)
{
this.lineNum = lineNum;
}
public int getLineNumber()
{
return lineNum;
}
//对外提供关闭流的方法
public void myClose()throws IOException
{
r.close();
}
}

MyLineNumberReader的更多相关文章

  1. java-IO

    框架图 IO(Input Output)流IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式,用于操作流的对象都在IO包中. 流按操作数据分为两种:字节流与字符流 .流按流向分为:输 ...

  2. 09_IO流

    1. IO(Input Output)流 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作数据分为两种: 字节流和字符流 流按类型分 ...

  3. JAVA基础学习day20--IO流二-缓冲流、字节流

    一.缓冲流 1.1.字符流的缓冲区 缓冲区的出现是为了提高IO的读写效率 对应类 BufferedReader BufferedWriter 缓冲区要结合流才可以使用 在流的基础上对流的功能进行了增强 ...

  4. IO流02--毕向东JAVA基础教程视频学习笔记

    提要 08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-rea ...

  5. javaSE第二十一天

    第二十一天    276 1:字符流(掌握)    276 (1)字节流操作中文数据不是特别的方便,所以就出现了转换流.    276 (2)转换流其实是一个字符流    276 1:InputStr ...

  6. Java IO(一)

       字节流的两个基类: InputStream OutputStream 字符流的两个基类: Reader Writer Writer 先学习一下字符流的特点. 既然IO流是用于操作数据的,那么数据 ...

  7. Java:IO流之字符流缓冲区详解

    字符流缓冲区: 1.缓冲区的出现提高了对数据的读写效率: 2.对应类:BufferedWriter.BufferedReader: 3.缓冲区要结合流才可以使用: 4.在流的基础上对流的功能进行了增强 ...

  8. Java API —— IO流小结

    练习题: 1.复制文本文件 package cn.itcast_01; import java.io.BufferedReader; import java.io.BufferedWriter; im ...

  9. Java基础知识强化之IO流笔记55:IO流练习之 自定义类模拟LineNumberReader的获取行号功能案例

    1. 自定义类模拟LineNumberReader的获取行号功能案例 2. 代码实现: (1)MyBufferedReader.java: package cn.itcast_08; import j ...

随机推荐

  1. windows 配置java环境变量

    https://www.cnblogs.com/cnwutianhao/p/5487758.html

  2. 关于sql链接超时的问题

    也许你会说,我在连接字符串中已经 设置了 Connect Timeout=80000 ,并且数据库中超时连接也是设置的值是一个很大的值.为啥到了30秒,仍然超时了呢??         这是因为:   ...

  3. Android编程权威指南(第三版)- 2.8 挑战练习:添加后退按钮

    package com.example.geoquiz; import android.support.v7.app.AppCompatActivity; import android.os.Bund ...

  4. Eclipse优化常用方法

    Eclipse优化常用方法如下: 1.减少不必要的验证 将Manual保持不动,build里面只留下classpath dependency Validator,其他的全部去掉.如果以后需要对文件进行 ...

  5. Linux tr命令使用方法

    tr命令主要用于删除文件中控制字符或进行字符转换.本文主要介绍tr命令的基本语法和使用实例. tr基本语法 tr命令格式:tr [ -d ] [ -c ] [ -s ] [ 字符串1 ] [ 字符串2 ...

  6. HG255D刷机OPENWRT笔记

    1.按网上的办法如下:(http://www.right.com.cn/forum/thread-143721-1-1.html) 自已编译了OPENWRT,然后拆开外壳接上TTL线,通电启动 然后用 ...

  7. 如何使用JDBC删除一条记录

    //根据学生id删除操作    public void deleteOne(int id) {        Statement stmt=null;     //  发送SQL语句,返回执行结果   ...

  8. [PHP]基于角色的访问控制RBAC

    ---------------------------------------------------------------------------------------------------- ...

  9. KVM虚拟化技术(六)磁盘管理

    KVM支持的虚拟磁盘类型 raw 这并非是一种真正的磁盘格式,而是代表虚拟机所使用的原始镜像:它并不存储元数据,因此可以作为保证虚拟机兼容性的候选方案,然而也正因为 它不存储元数据,因此不能支持某些高 ...

  10. 让一个非窗口组件(non-windowed component)可以接受来自Windows的消息

    为什么要这样做? 有时候我们需要一个非窗口组件(比如一个非继承自TWinContrl的组件)可以接受Windows消息.要接受消息就需要一个窗口句柄,但是非窗口组件却没有句柄.这篇文章将讲述怎么让一个 ...