黑马程序员-----IO流(第五篇)

来源:互联网 发布:苹果充值卡回收软件 编辑:程序博客网 时间:2024/06/06 17:15

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

1.IO流用来处理设备之间的数据传输

流按操作数据分为字节流与字符流

流按流向分为:输入流,输出流

字节流的抽象基类:InputStreamOutputStream

字符流的抽象基类:ReaderWriter

 

2.FileWrite应用实例

import java.util.*;import java.io.*;class  test5{       public static void main(String[] args)       {              //创建一个FileWriter对象,该文件会被创建到指定目录下                FileWriter fw=null;              FileReader fr=null;              try              {                     //传递一个true参数,代表不覆盖已经存在的文件,在文件末尾处进行写                     fw=new FileWriter("demo.txt",true);                     fr=new FileReader("demo.txt");                     fw.write("ab\r\ncde");                     fw.flush();                     //逐个读取       /*           int ch=0;                     while((ch=fr.read())!=-1)//fr.read(),返回int型数据                        {                            System.out.println("ch="+(char)ch);                     }                     */                     //通过字符数组来读取,read(char[])返回的是读到的字符个数。                        char a[]=new char [3];                     int num=0;                     while((num=fr.read(a))!=-1)                     {                            System.out.println(new String(a,0,num));                     }                                }              catch (IOException e)              {                     System.out.println("cuowu ");              }              finally              {                          try                     {                            //关闭的前提是,文件被创建                           if(fw!=null)                                   fw.close();//关闭流资源,并刷新一次                            fr.close();                     }                     catch (IOException e)                     {                            System.out.println(e.toString());                     }                               }       } }


3.字符流的缓冲区

缓冲区的出现提高了对数据的读写效率

对应类:BufferWriter BufferReader

创建缓冲区之前,必须现有流对象。

把需要提高效率的流对象作为参数传递给缓冲区的构造函数即可。

跨平台的换行符,newLine();

BufferReader:字符流读取缓冲区,提供了一次读一行的方法,方便于对文本数据的获取。当返回值为null时,文本结束。

readLine();不返回回车符,其实也是read在一个一个读,到回车符时全部返回

 

4.MyReader//专门用于读取数据的类

装饰模式比继承要灵活,避免继承体系臃肿,降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,都属于同一体系。

 

5.字节流

InputStream  OutputStream//写入

需求:想要操作图片数据,就要用到字节流

字节流基本操作:

import java.io.*;class test6 {       public static void main(String[] args) throws IOException       {              writeFile();              readFile_1();              readFile_2();       }       public static void writeFile() throws IOException       {              FileOutputStream fos=new FileOutputStream("fos.txt",true);              //字符串变成字节数组              fos.write("abcde".getBytes());              fos.close();       }       public static void readFile_1() throws IOException       {              //定义字节流数组读取              FileInputStream fis=new FileInputStream("fos.txt");              byte[] b=new byte[1024];//定义字节数组,不要写成Byte了。                int num=0;              while((num=fis.read(b))!=-1)       //没有读到结束时。                {                     System.out.println(new String(b,0,num));              }                          fis.close();       }      public static void readFile_2() throws IOException       {              FileInputStream fis=new FileInputStream("fos.txt");              byte[] b=new byte[fis.available()];//定义一个刚好的自己数组,但是如果是视频等需要太大内存,容易内存泄露             int num=fis.read(b);                   /*  while((num=fis.read(b))!=-1) //没有读到结束时。              {                     System.out.println(new String(b,0,num));              }*/              System.out.println(new String(b,0,num));              fis.close();       }}


0 0
原创粉丝点击