黑马程序员——IO流

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
IO流
一、IO流的概述
      IO是input和output的简写,代表着输入和输出,他用来处理设备之间的数据传输,而java中对数据的操作就是通过流的方式,java用于操作流的对象都在IO包中。流按照造作数据分为两种:字符流和字节流;流按照流向也分为两种:输入流和输出流。
二、字符流
     字符流的两个基类分别为:Reader和Writer。
      FileWriter:字符流中的文件输出流。
      使用FileWriter往文件中写数据:
//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件,而且该文件会被创建到指定的目录下,如果该目录下已有同名文件,将被//覆盖。
FileWriter fw=new FileWriter("demo.txt");
     //或
FileWriter fw=new FileWriter("demo.txt",true);
     //使用后者传递一个true参数则不会覆盖已有文件,而是将数据添加到文件末尾处。
     //调用write方法,将字符串写入流中。
 fw.write("abcde");
     //刷新流对象中缓冲中的数据,将数据写入目的地中。     
fw.flush();
     //关闭流资源,关闭前刷新缓冲中的数据。
fw.close(); 
      FileReader:字符流中的文件输入流
     使用FileReader读取文件中的数据:
      //创建一个FileReader对象,和指定名称的文件相关联,要保证该文件时已经存在的。
 FileReader fr=new FileReader("demo.txt");
      //调用读取流对象的读取方法。
 fr.read();//读取单个字符,返回int型数字,独到末尾时返回-1
      //或
fr.fead(char[] cbuf);//数组长度个数的字符,存入数组,返回读取的个数
      //使用循环读取多个字符     
 int ch=0;
      while(true)
      {
           if((ch=fr.read())!=-1)
           System.out.print((char)ch);
      }
      //使用数组的方式读取字符   
char[] buf =new char[1024];
      int num=0;
      while((num==fr.read(buf))!=-1)
      {
          System.out.print(new String(buf,0,num));
      }
      //关闭流资源。
fr.close();      
三、字符流的缓冲区
      缓冲区的出现是为了提高流的操作效率,所以在创建缓冲区之前必须要先有流对象。
       BufferedWriter的使用方法:
      //创建字符流对象
      FileWriter fw=new FileWriter("buf.txt"):
      //为了提高字符写入流的效率,需要加入缓冲技术,将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
      BufferedWriter bufw=new BufferedWriter(fw);
      //使用缓冲区的写入方法写入流。
      bufw.write("abcde");
      //使用缓冲区的刷新方法,将数据写入文件中。
      bufw.flush();
      //关闭缓冲区和流,释放资源。
      bufw.close();
      //扩展:使用缓冲区的newLine()方法可以实现换行功能。
       BufferedReader的使用方法:
      //创建一个读取流对象和文件相关联。
      FileReader fr=new FileReader("buf.txt");
      //为了提高效率,加入缓冲技术,将字符读取流作为参数传递给缓冲对象的构造函数。
      BufferedReader bufr=new BufferedReader(fr);
      //使用缓冲区的readLine()方法和循环读取数据
      String line=null;
      while((line=bufr.readLine())!=null)
      {
              System.out.println(line)
      }
      //关闭缓冲区和流,释放资源。
      bufw.close();
四、装饰设计模式
      当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能进行扩展,自定义的该类就成为装饰类。
五、字节流
      字节流的两个基类分别为:InputStream和OutputStream
       FileOutputStream:字节流中的输出文件流
       使用FileOutputStream往文件中写数据:
       //创建一个FileOutputStream对象。该对象一被初始化就必须要明确被操作的文件,而且该文件会被创建到指定的目录下,如果该目录下已有同名文件,将被覆盖。
       FileOutputStream fos=new FileOutputStream("demo.txt");
       //调用write方法,使用getBytes方法将字符串转为byt类型数组后写入流中。
       fos.write("abcde".getBytes());
       //关闭流资源。
       fos.close(); 
        使用FileInputStream读取文件中的数据:
      //创建一个FileInputStream对象,和指定名称的文件相关联,要保证该文件时已经存在的。
     FileInputStream fis=new FileInputStream("demo.txt");
      //调用读取流对象的读取方法。
      fid.resd();//读取单个字符,返回int型数字,独到末尾时返回-1
      fis.fead(byte[] bt);//数组长度个数的字节,存入数组,返回读取的个数
      //使用循环读取多个字节
      int ch=0;
      while(true)
      {
           if((ch=fis.read())!=-1)
           System.out.print((char)ch);
      }
      //使用数组的方式读取字符
      byte[] buf =new byte[1024];
      int num=0;
      while((num=fis.read(buf))!=-1)
      {
          System.out.print(new String(buf,0,num));
      }
      //使用字节流特有的方法读取字符
      byte[] buf =new byte[fis.available()];
      fis.read(buf);
      System.out.print(new String(buf));
      //关闭流资源。
      fis.close();

六、字节流的缓冲区
      缓冲区的出现是为了提高流的操作效率,所以在创建缓冲区之前必须要先有流对象。字节流的缓冲区为BufferedInputStream和BufferedOutputStream,这两者的用法与字符流缓冲区用法一致,创建缓冲区对象,将字节流对象传入缓冲区,然后操作缓冲区对象实现字节流的缓冲输入或输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值