A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李文思 中级黑马   /  2015-8-1 22:11  /  437 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李文思 于 2015-8-1 22:14 编辑
  1. package com.itheima;

  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.io.Reader;

  6. /**
  7. * Test6--自定义字符输入流的包装类,通过这个包装类对底层字符输入流进行包装,
  8. * 让程序通过这个包装类读取某个文本文件(例如,一个java源文件)时,能够在读取的每行前面都加上有行号和冒号。
  9. * */
  10. public class Test6 {
  11.         public static void main(String[] args) {
  12.                 //创建自定义的字符输入流包装类。
  13.                 try {
  14.                         PackWriter pw = new PackWriter(new FileReader("d:\\Test1.java"));
  15.                         String line = null;
  16.                         while((line = pw.readLine()) != null) {
  17.                                 System.out.println(line);
  18.                         }
  19.                         pw.close();
  20.                 } catch (FileNotFoundException e) {
  21.                         e.printStackTrace();
  22.                 } catch (IOException e) {
  23.                         e.printStackTrace();
  24.                 }
  25.         }
  26. }

  27. //自定义字符输入流的包装类。
  28. class PackWriter {
  29.         //因为包装的是字符输入流,所以构造的时候要接收一个字符输入流进来。
  30.         private Reader reader;
  31.         PackWriter(Reader reader) {
  32.                 this.reader = reader;
  33.         }
  34.         //定义一个行的计数
  35.         private int count;
  36.         //提供一次读一行的方法:
  37.         public String readLine() {
  38.                 try {
  39.                         //创建一个容器,用于存储读取到的字符
  40.                         StringBuilder sb = new StringBuilder();
  41.                         
  42.                         //定义一个标记,指示文件是否已到达结尾。
  43.                         boolean flag = true;
  44.                         int info = 0;
  45.                         //开始读取数据,读到行的结尾处为止。
  46.                         while((info = reader.read()) != -1) {
  47.                                 flag = false;
  48.                                 String str = (char)info + "";
  49.                                 //判断是否到达行结尾
  50.                                 if (str.equals("\r"))
  51.                                         continue;
  52.                                 if(str.equals("\n"))
  53.                                         break;
  54.                                 sb.append(str);
  55.                         }
  56.                         
  57.                         //如果没有读到任何的数据,则返回null
  58.                         if (flag)
  59.                                 return null;
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马