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;
		//创建输入流-读取文件信息到流中区,所以对于流来讲是“入”了
		FileReader in=new FileReader("BufferedWriterDemo.java");
		MyLineNumberReader mlnr=new MyLineNumberReader(in);
		while((line=mlnr.MyReadLine())!=null)
		{
			System.out.println(mlnr.getLineNumber()+":"+line);
		}
		mlnr.close();
	}

}
//定义一个自定义的类似于LineNumberReader的类
class  MyLineNumberReader extends Reader{
	private Reader r;
	int lineNumber;
	int ch=0;
	String line=null;
	//根据构造函数判断,显然此类也是一个构造类
	MyLineNumberReader(Reader r)
	{
		this.r=r;
	}
	public String MyReadLine() throws IOException {
		lineNumber++;
		StringBuilder sBuilder=new StringBuilder();
		while((ch=r.read())!=-1)
		{
			if(ch==‘\n‘)
				continue;
			if(ch==‘\r‘)
				return sBuilder.toString();
			else
				sBuilder.append((char)ch);
		}
		if(sBuilder.length()>0)
			return sBuilder.toString();
		return null;
	}

	public int getLineNumber() {
		return lineNumber;
	}
	public void setLineNumber(int lineNumber) {
		this.lineNumber = lineNumber;
	}
	@Override
	public int read(char[] cbuf, int off, int len) throws IOException {
		// TODO Auto-generated method stub
		return 0;
	}
	@Override
	public void close() throws IOException {
		// TODO Auto-generated method stub
		r.close();
	}
}

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

时间: 2024-12-23 23:14:35

JAVA之IO技术-自定义的LineNumberReader类的相关文章

JAVA之IO技术自定义装饰类MybufferedReader

package ioTest.io2; import java.io.FileReader; import java.io.IOException; /* * 自定义的BufferedReader类 * MyBufferedReaderDemo:也是为了提高对流的操作性能. * 所以构造函数中应该将流传入 * * --------拓展:装饰设计模式 * 装饰设计模式是28种设计模式之一.目的是为了增强功能. * 将被增强的类A->增强类B * 将A的对象做为参数,传递给B,让B类对A类进行增强.

JAVA之IO技术File类的使用

package ioTest.io3; /* * File类是对文件和文件夹的抽象. * File类的常见方法: * 1.创建 * createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建,返回false. * 和输出流对象不一样,输出流对象,只要已建立就创建,如果文件存在,则覆盖. * mkdir():创建此抽象路径名指定的目录 * mkdir():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录. * 2.删除 * delete() * deleteOnEx

JAVA之IO技术相关Properties类 存储配置文件信息

package ioTest.io3; /* * Properties存储配置文件信息 * 1.文件信息--------------------------- * 2.根据文件信息获取key和value---|流| * 3.将key,value的之对应存储到properties对象中 */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOu

JAVA之IO技术相关Properties类的使用

package ioTest.io3; /*Properties是hashtable的子类. * 也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串 * 是集合中和io技术结合的一个容器 * * 该对象的特点是可以用于键值对形式的配置文件 */ import java.util.Properties; public class PropertiesDemo { public static void main(String[] args) { // TODO Auto-generat

JAVA之IO技术-字符流对象Writer的子类对象FileWriter的使用

  package ioTest.io1; import java.io.File; import java.io.FileWriter; /* * IO技术,按照操作数据的方式分类如下: * 字节流和字符流 * 字节流的两个基类: * InputStream,OutputStream * 字节流的两个基类: * Reader,Writer * 思考一个问题:为什么有了字节流还要出现字符流? * * 先学习字符流的特点. * * 既然IO是操作数据的,那么数据最常见的体现形式 文件 * 需求:

JAVA之IO技术文件的复制原理。

在Swing 中显示文本或提示信息的方法是使用标签,它支持文本字符串和图标.在应用程序的用户界面中,一个简短的文本标签可以使用户知道这些控件的目的,所以标签在Swing中是比较常用的控件. 1.标签的使用 标签由JLabel类定义,父类为JComponent类. 标签可以显示一行只读文本,一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单低显示文本和图片,但是可以使用标签的特性指定标签上文本的对齐方式. JLabel类提供了多种构造方法,这样可以创建多种标签,例如显示只有文本的标签.只

JAVA之IO技术转换流方式优化键盘录入InputStreamReader,OutputStreamReader

package ioTest.io2; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; /* * 在Readin这个类(读取键盘录入的最基础的方法类)的末尾,我们提出了一个

JAVA之IO技术BufferedReader,BufferedWriter的缓冲区技术的使用和原理

BufferedReader: package ioTest.io2; /* * BufferedReader:该缓冲区提供了一个一次读一行的方法 * readline(); * * 加入缓冲区技术的优点是什么呢? * 原来我是读一个字符取一个字符,现在变成我读一行字符,将其放在数组中,然后再取. * 这样是不是提高了效率.实际上BufferedReader类底层实现的原理,就是利用了数组. */ import java.io.BufferedReader; import java.io.Fil

JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。

package ioTest.io3; /* * 获取指定目录下的文件夹和文件的File对象或是字符串名称. * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用. */ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class FileDemo2 { public static void m