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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-10-3 20:02  /  404 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a
  1. package demo.io;

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

  7. public class IODemo5_MyBufferedReader {

  8.         /**
  9.          * 模拟一个缓冲区 1 有数组 2 数组下标 3 缓冲区内容长度
  10.          * @throws IOException
  11.          */
  12.         public static void main(String[] args) throws IOException {
  13.                 File srcFile = new File("c:\\Java review", "Test7.java");
  14.                 MybufferedReader fr = null;
  15.                 try {
  16.                         fr = new MybufferedReader(new FileReader(srcFile));
  17.                         String line = null;
  18.                         while((line = fr.readLine())!=null)
  19.                                 System.out.println(line);
  20.                 } catch (FileNotFoundException e) {
  21.                         e.printStackTrace();
  22.                 }finally{
  23.                         if(fr != null)
  24.                                 try {
  25.                                         fr.close();
  26.                                 } catch (IOException e) {
  27.                                         e.printStackTrace();
  28.                                 }
  29.                 }

  30.         }

  31. }

  32. class MybufferedReader {
  33.         private Reader r;
  34.         private int count = 0;
  35.         private int pos = 0;
  36.         private char[] cbuf = new char[1024];

  37.         public MybufferedReader(Reader r) {
  38.                 this.r = r;
  39.         }

  40.         // 读单字符
  41.         public int read() throws IOException {
  42.                 int ch = 0;
  43.                 if (count == 0) {
  44.                         count = r.read(cbuf);
  45.                         pos = 0;
  46.                 } else if (count < 0) {
  47.                         return -1;
  48.                 } else {
  49.                         ch = cbuf[pos++];
  50.                         count--;
  51.                 }
  52.                 return ch;
  53.         }

  54.         // 行读取
  55.         public String readLine() throws IOException {
  56.                 StringBuilder sb = new StringBuilder("");
  57.                 int ch;
  58.                 while ((ch = read()) != -1) {//调用自身的函数提高代码复用性
  59.                         if ((char) ch == '\r')
  60.                                 continue;
  61.                         if ((char) ch == '\n')
  62.                                 return sb.toString();
  63.                         sb.append((char) ch);
  64.                 }
  65.                 if (sb.length() > 0)
  66.                         return sb.toString();
  67.                 return null;
  68.         }
  69.         public void close() throws IOException{
  70.                 r.close();
  71.         }
  72. }
复制代码


0 个回复

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