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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不怕黑人 中级黑马   /  2015-7-26 21:25  /  421 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package fuxi2;

  2. import java.io.BufferedWriter;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;

  6. /**
  7. * 需求:建立一个MyBufferedReader类
  8. * 这其实就是利用了装饰设计模式而设计的装饰类。这种设计模式,主要是对已有对象经行功能增强。其比继承要灵活,避免了继承体系的臃肿,降低了类与类之间的联系。
  9. * 装饰类与被装饰类通常属于同一个体系。
  10. *@author XiaLei
  11. */
  12. public class Day19Test1 {

  13.         public static void main(String[] args) {
  14.                 MyBufferedReader bufr = null;
  15.                 BufferedWriter bufw = null;
  16.                 try{
  17.                         bufr = new MyBufferedReader(new FileReader("D:\\JAVA\\day13\\StringTest.java"));
  18.                         bufw = new BufferedWriter(new FileWriter("D:\\StringTest.txt"));
  19.                        
  20.                         String line =null;//可以理解为缓冲区的中转站
  21.                         while((line=bufr.myReadLine())!=null){//readLine读取的是换行符之前的内容,当读到换行符时,它就会把读到的内容返回。
  22.                                 bufw.write(line);
  23.                                 bufw.newLine();//所以这里要加上newLine换行
  24.                                 bufw.flush();//有缓冲区必须要刷新
  25.                         }       
  26.                 }
  27.                 catch(IOException e){
  28.                         throw new RuntimeException("读写失败");
  29.                 }
  30.                 finally{
  31.                                 try{
  32.                                         if(bufr!=null)
  33.                                         bufr.myClose();//缓冲区关闭,读取写入流也就关闭了,不用单独关闭
  34.                                 }
  35.                                 catch(IOException e){
  36.                                         throw new RuntimeException("关流失败");
  37.                                 }
  38.                                 try{
  39.                                         if(bufw!=null)
  40.                                         bufw.close();
  41.                                 }
  42.                                 catch(IOException e){
  43.                                         throw new RuntimeException("关流失败");       
  44.                                 }
  45.                         }
  46.         }

  47. }
  48. class MyBufferedReader{
  49.        
  50.         private FileReader fr;
  51.         MyBufferedReader(FileReader fr){
  52.                 this.fr = fr;
  53.         }
  54.         public String myReadLine() throws IOException{//根据readLine读取到换行符就返回之前读到的内容这一原理,设计自己的读取方式。
  55.                
  56.                 StringBuilder sb = new StringBuilder();//建立容器,将读到的内容存入。
  57.                 int num = 0;
  58.                 while((num=fr.read())!=0){
  59.                         if(num=='\n')
  60.                                 continue;
  61.                         if(num=='\r')
  62.                                 return sb.toString();
  63.                         else
  64.                                 sb.append((char)num);
  65.                 }
  66.                 if(sb.length()!=0)//当遇到条件判断时,一定要细心。多考虑一些情况!!!!!!!
  67.                         return sb.toString();
  68.                 return null;
  69.         }
  70.         public void myClose() throws IOException{//建立自己的关流动作。
  71.                 fr.close();
  72.         }
  73. }
复制代码

0 个回复

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