字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader

来源:互联网 发布:奥巴马医保 知乎 编辑:程序博客网 时间:2024/05/16 18:49

字符流的缓冲区技术:

对于一些大文件,如果读取一个字符才写一个字符,读写操作过于频繁。

为了解决这个问题,引入了缓冲区技术。

缓冲区技术是在流的基础上(必须要先有流)增强了流对于数据的操作效率。

就如同在水龙头上拿水喝,原本是一滴一滴喝的,但是现在用了一个杯子装着来喝,更有效率。

 

import java.io.*;class   Ioliou7{         public   static  void   main(String[] args)         {                   FileWriter   fw=null;                   BufferedWriter    bfw=null;                   try                   {                      fw=new FileWriter("f:\\yuyuyu.txt");                      bfw=new BufferedWriter(fw);                   //把写入流对象传给缓冲区构造函数                      bfw.write("假面骑士01号登场!");                   //实际上把字符写入流的还是fw调用底层资源实现的                   bfw.newLine();                   //换行                     bfw.write("假面骑士02号登场!");                      bfw.flush();                   //这里还是要刷新才把存在流的数据传倒文件里面                                     }                   catch(IOException  e)                   {                            throw   new RuntimeException("写操作有误");                   }                   finally                   {                            try                            {                            if(bfw!=null)                            {                          bfw.close();                          //关闭流,                   /*                   bfw.close();本质上关闭流的还是fw底层调用close()方法实现的,                   所以就不用再写fw.close();了                   */                         }                                                               }                            catch(IOException   e)                            {                                     throw  new  RuntimeException("bfw.close();出问题抛出异常了");                            }                   }          }         public  static void  soc(Object  obj)         {             System.out.println(obj);                                      }}

——————分割线——————

 

/*

字符流的读取缓冲区技术

BufferedReader

 

 

*/

import  java.io.*;class  Ioliou8{         publicstatic void main(String[] args)         {                   FileReader   fr=null;       BufferedReader   bfr=null;                   try                   {                      fr=new  FileReader("e:\\JAVAwenjian\\Ioliou8.java");          bfr=new   BufferedReader(fr);                                      String   s=null;                   while((s=bfr.readLine())!=null)                   /*                   readLine()一行一行的读取,不包含任何行终止符,如果没有数据读取就返回null,                   但是不返回回车符,所以输出打印或者写入的时候要记得换行。                   readLine读取数据本质上还是要调用read方法一个一个读取的                   */                   {           soc(s);                   }                                              }                   catch(IOException  e)                   {                            throw  new RuntimeException("读操作出问题");                   }                   finally                   {                        try                        {                                      if(bfr!=null)                                        bfr.close();                        }                        catch (IOException  e)                        {                                throw new  RuntimeException("读操作出问题");                        }                   }          }         public  static void  soc(Object  obj)         {             System.out.println(obj);                                         }}

————————分割线————

 

/*

字符流利用缓冲区进行复制操作文件

把e:\\JAVAwenjian\\Ioliou8.java复制到d盘中。

 

*/

import java.io.*;class  Ioliou9{         public   static  void  main(String[] args)         {         FileWriter  fw=null;         FileReader  fr=null;         BufferedWriter  bfw=null;         BufferedReader  bfr=null;       try       {                     fw=new FileWriter("d:\\Ioliou8_copy.java");//建立字符流写入对象                     fr=new FileReader("e:\\JAVAwenjian\\Ioliou8.java");//建立字符流读取对象                     bfw=new  BufferedWriter(fw);//建立字符流写入缓冲区                     bfr=new  BufferedReader(fr);//建立字符流读取缓冲区          String   s=" ";         while((s=bfr.readLine())!=null)                     {                                               bfw.write(s);                            bfw.newLine();//换行                     }                                         }       catch (IOException  e)       {                            throw   new  RuntimeException("复制操作出问题");       }                   finally                   {                            try                            {                                     if(bfw!=null)                                       bfw.close();                            }                            catch(IOException  e)                            {                                     throw   new RuntimeException(" bfw.close();出问题");                            }                     try                     {                              if(bfr!=null)                                       bfr.close();                     }                     catch (IOException  e2)                     {                              throw new RuntimeException("bfr.close();出问题");                     }                                     }           }         public  static  void  soc(Object  obj)         {             System.out.println(obj);                                   }}

————————分割线——————

 

/*

建立一个自己的BufferedReader

这种设计模式也被称之为装饰设计模式,

自定义一个类把已有的对象传进来,

然后针对已有的功能进行强化。

*/

import java.io.*;class  MyBufferedReader {         private   FileReader  fr=null;         MyBufferedReader(FileReader   fr)         {                this.fr=fr;                        }         StringBuffer   sb=new StringBuffer();         public  String readLine()throws  IOException         {                   char   ch=' ';        int  i=0;                   while((i=fr.read())!=-1)                   {           if(i=='\r')                continue;                            if(i=='\n')                return  sb.toString();                       ch=(char)i;                       sb.append(ch);                               }                   if(sb!=null)            return  sb.toString();                   return  null;                   /*                   sb.toString()返回的是容器内部的字符串,                   写返回值的时候千万不要直接写return  sb                   sb是StringBuffer型的容器!              */         }         public  void  close()throws  IOException         {              fr.close();                  }         public  static void  soc(Object  obj)         {        System.out.println(obj);          }        }class  Ioliou10{         public   static  void   main(String[] args)          {                MyBufferedReader  bfr =null ;                FileReader  fr=null;                   try                   {                fr=new FileReader("f:\\yuyuyu.txt");                bfr=new  MyBufferedReader(fr);                     String  s=bfr.readLine();                     soc(s);                    }                   catch(IOException  e)                   {                            throw  new RuntimeException("操作异常");                   }                   finally                   {                       try                       {                                     if(bfr!=null)                                       bfr.close();                       }                       catch (IOException  e)                       {                                     throw  new RuntimeException("bfr.close();出问题了");                       }                   }                             }         public  static void  soc(Object  obj)         {            System.out.println(obj);                    }}

——————分割线————

 

 

/*

装饰类的介绍:(装饰设计模式)

通常自定义一个类,传进已有的对象,然后增加已有的功能。

装饰类和被装饰类都有着相同的功能,只不过前者功能更强。

所以,一般装饰类和被装饰类在同一个体系中,

而且装饰类记得要覆盖父类的抽象方法,

注意是否要抛出异常。

*/

import java.io.*;class  MyBufferedReader  extends  Reader{         private   FileReader  fr=null;         MyBufferedReader(FileReader   fr)         {                this.fr=fr;                        }         StringBuffer   sb=new StringBuffer();         public  String readLine()throws  IOException         {                   char   ch=' ';                   int  i=0;                   while((i=fr.read())!=-1)                   {                if(i=='\r')                continue;                            if(i=='\n')                return  sb.toString();                ch=(char)i;                 sb.append(ch);                               }                   if(sb!=null)                  return  sb.toString();                   return  null;         }         public  void  close()throws  IOException         {              fr.close();                  }         public  static void  soc(Object  obj)         {        System.out.println(obj);          }         //下面记得要覆盖Reader类中的抽象方法          public  int  read(char[]   cbuf,int  off,int len)throws  IOException         {                   return   fr.read(cbuf,off,len);                                       } }class  Ioliou11{         public   static  void   main(String[] args)          {              MyBufferedReader  bfr =null ;               FileReader  fr=null;                   try                   {               fr=new FileReader("f:\\yuyuyu.txt");               bfr=new  MyBufferedReader(fr);                     String  s=bfr.readLine();                     soc(s);                    }                   catch(IOException  e)                   {                            throw  new RuntimeException("操作异常");                   }                   finally                   {                       try                       {                                     if(bfr!=null)                                       bfr.close();                       }                       catch (IOException  e)                       {                                     throw  new RuntimeException("bfr.close();出问题了");                       }                   }                             }         public  static void  soc(Object  obj)         {            System.out.println(obj);                    }}

——————分割线——————

 

/*

LineNumberReader类的应用:

该类是BufferedReader类的子类

*/

 

import java.io.*;class  Ioliou12{         public  static void  main(String[] args)         {                   FileReader   fr=null;                 LineNumberReader   lnr=null;                   try                   {                      fr=new FileReader("Ioliou12.java");                   //建立读取流对象                      lnr= new  LineNumberReader(fr);                                     String   s=" ";                   lnr.setLineNumber(123);                   //设置行号从123的后一行开始                   while((s=lnr.readLine())!=null)                   {                            soc(lnr.getLineNumber()+":"+s);                             //getLineNumber方法用来获取行号                                         }                          }                   catch(IOException  e)                   {                            throw  new RuntimeException("读取操作出问题");                   }                   finally                   {                            try                            {                                     if(inr!=null)                          lnr.close();                                    }                            catch(IOException  e2)                            {                                     throw   new RuntimeException("lnr.close();出问题了");                            }                                               }                            }         public  static void  soc(Object  obj)         {             System.out.println(obj);                                    }}

编译运行结果如图1所示:

     图1

技术分享

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

黑马程序员——21,字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader

标签:黑马程序员   字符流   设计模式   

原文:http://blog.csdn.net/dangaodeaiyi/article/details/47374211

阅读全文
0 0
原创粉丝点击