LineNumberReader类

默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用 setLineNumber(int) 更改行号。但要注意的是,setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。可认为行在遇到以下符号之一时结束:换行符(‘\n‘)、回车符(‘\r‘)、回车后紧跟换行符。

FileReader fr = new FileReader(“demo.txt”);

LineNumberReader lnr = new LineNumberReader(fr);

String line = null;

lnr.setLineNumber(100);//从100开始计数,默认从1开始

while((line = lnr.readLine()) != null){

sysout(lnr.getLineNumber() + “:”+ line);

}

lnr.close();

-----------------------------------

模拟一个带行号的缓冲区对象

class MyLineNumberReader{

private Reader r;

private int lineNumber;

MyLineNumberReader(Reader r){

this.r = r;

}

public String myReadLine(){

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 void myClose(){

r.close();

}

public void setLineNumber(int lineNumber){

this.lineNumber = lineNumber;

}

public int getLineNumber(){

return lineNumber;

}

main(){

FileReader fr = new FileReader(“copyTextByBuf.java”);

MyLineNumberReader mylnr = new MyLineNumberReader(fr);

String line = null;

while((line = mylnr.myReadLine()) != null){

sysout(line);

}

mylnr.myClose();

}

}

------------------------------

优化

class MyLineNumberReader extends MyBufferedReader{

private int lineNumber;

MyLineNumberReader(Reader r){

super(r);

}

public String myReadLine(){

lineNumber++;

return super.myReadLin();

}

public void setLineNumber(int lineNumber){

this.lineNumber = lineNumber;

}

public int getLineNumber(){

return lineNumber;

}

main(){

FileReader fr = new FileReader(“copyTextByBuf.java”);

MyLineNumberReader mylnr = new MyLineNumberReader(fr);

String line = null;

while((line = mylnr.myReadLine()) != null){

sysout(line);

}

mylnr.myClose();

}

}

LineNumberReader类

时间: 2024-08-07 15:03:43

LineNumberReader类的相关文章

JAVA之IO技术-自定义的LineNumberReader类

package ioTest.io2; /* * 自定义一个带有读取行号方法的读取文件的装饰类 */ import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class MyLineNumberReaderDemo { public static void main(String[] args) throws IOException { String line; //创建输入流-读取

java I/O系统 LineNumberReader类

LineNumbeReader类可以很方便的读取文件的行号 package ch13; import java.io.*; import io.BufferedInputFile; public class BasicFileOutput { static String file = "src/ch13/Writer.java"; public static void main(String[] args) throws IOException { BufferedReader in

黑马程序员——21,字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- /* 字符流的缓冲区技术: 对于一些大文件,如果读取一个字符才写一个字符,读写操作过于频繁. 为了解决这个问题,引入了缓冲区技术. 缓冲区技术是在流的基础上(必须要先有流)增强了流对于数据的操作效率. 就如同在水龙头上拿水喝,原本是一滴一滴

黑马程序员——【Java基础】——Java IO流

一.IO概述 1.IO:是Input.Output的缩写. 2.特点: (1)用于处理设备间的数据传输. (2)Java对数据的处理是通过“流”完成的. (3)Java用于操作流的对象都在IO包中. (4)流按操作分为两种:字节流和字符流. (5)流按流向分为:输入流和输出流(输入输出是相对于“内存”而言的). 3.IO流常用基类 (1)字节流abstract基类:InputStream.OutputStream: (2)字符流抽象基类:Reader.Writer: 二.字符流(Reader.W

设计模式4:装饰模式(1)

作用: 基于已经存在的功能提供增强功能. 将扩展的类作为新的类的构造函数参数传入,然后对这个类进行装饰处理. 为了让装饰者有被装饰的功能,需要存在继承关系. 简单的点讲就是为了扩展一个已定义好的类的功能,而不修改原来类的定义,原来的类仍然可以继续使用,现在定义一个新的类继承原来的类,同时在这个新的类中定义父类的成员变量,同时在构造方法中将外界的一个父类对象传给这个成员变量,然后既可以通过这个成员变量使用父类的方法,同时又可以增加新的方法实现对父类功能的扩充.例如IO流中很多类都采用了装饰模式,如

黑马程序员——java基础---I/O流

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.I/O流概述 概念:I/O流用来处理设备之间的数据传输.Java对数据的操作是通过流的方式,而操作流的对象都放在IO包中. 分类: 按操作数据分为:字符流与字节流. 按流向分为:输入流与输出流. IO流常用基类:        字符流的抽象基类:Reader——Writer        字节流的抽象基类:InputStream——OutputStream        注意:由这四个类派

Java API —— IO流小结

练习题: 1.复制文本文件 package cn.itcast_01; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /* * 复制文本文件 * * 分析: * 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. * 通过该原理,我们知

Java SE学习笔记-IO

1.主要内容 2.详细内容 2.1.IO流概念 (1)用来处理设备(硬盘,控制台,内存)之间的数据: (2)Java中对数据的操作都是通过流的方式: (3)Java中用于操作流的类都是放在IO包内: (4)按照流操作的数据类型不同,可以分为字节流和字符流:而字符流是为了方便中文的操作而来的: (5)按照流的流向不同分为:输入流和输出流. 2.2.IO流常用基类 2.2.1.字节流的抽象基类 完整图如下图所示: 其中重点的类如下图所示: (1)InputStream:输入字节流,字节读取流抽象类:

系统学习 Java IO (十五)----字符读写 Reader/Writer 其他子类

目录:系统学习 Java IO---- 目录,概览 跟踪行号的缓冲字符输入流 LineNumberReader LineNumberReader 类是一个 BufferedReader ,用于跟踪读取字符的行号.行号从 0 开始.每当 LineNumberReader 在包装的 Reader 返回的字符中遇到行终止符时,行号递增. 可以通过调用 getLineNumber() 方法获取当前行号,也可以通过调用 setLineNumber() 方法设置当前行号. 注意设置的行号不会改变实际的文件指