黑马程序员技术交流社区
标题:
自定义字符输入流包装类
[打印本页]
作者:
李文思
时间:
2015-8-1 22:11
标题:
自定义字符输入流包装类
本帖最后由 李文思 于 2015-8-1 22:14 编辑
package com.itheima;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* Test6--自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
* 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
* */
public class Test6 {
public static void main(String[] args) {
//创建自定义的字符输入流包装类。
try {
PackWriter pw = new PackWriter(new FileReader("d:\\Test1.java"));
String line = null;
while((line = pw.readLine()) != null) {
System.out.println(line);
}
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//自定义字符输入流的包装类。
class PackWriter {
//因为包装的是字符输入流,所以构造的时候要接收一个字符输入流进来。
private Reader reader;
PackWriter(Reader reader) {
this.reader = reader;
}
//定义一个行的计数
private int count;
//提供一次读一行的方法:
public String readLine() {
try {
//创建一个容器,用于存储读取到的字符
StringBuilder sb = new StringBuilder();
//定义一个标记,指示文件是否已到达结尾。
boolean flag = true;
int info = 0;
//开始读取数据,读到行的结尾处为止。
while((info = reader.read()) != -1) {
flag = false;
String str = (char)info + "";
//判断是否到达行结尾
if (str.equals("\r"))
continue;
if(str.equals("\n"))
break;
sb.append(str);
}
//如果没有读到任何的数据,则返回null
if (flag)
return null;
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2