IO流的知识点

IO流

   作用:解决设备和设备之间的数据传输问题。

    按照 数据流出方向来划分:输出流和输入流

    按照 处理的单位来进行划分:字节流和字符流
             字节流 : 读取的数据是文件中的 二进制数据,不会对这个二进制数据进行任何的处理,直接以 二进制流的方式进行传输
             字符流: 读取的数据是以字符为单位的。 字符串也是读取到这些二进制数据,然后它会把这些二进制数据转换为我们可以识别的字符。


1.字节流

     使用步骤:

           1.目标 (确定读取的 文件位置)
   2.建立数据传输的 通道
   3.读取文件中的 数据
   4.关闭资源

    输入流:FileInputStream和BufferedInputStream

          例如:1.找到目标文件(用File来创建)

                        File file = new File("要找的文件目录");

                     2.建立数据传输的通道

                        FileInputStream inputStream = new FileInputStream(file); //  但要注意在这个方法中会抛                                             出 FileNotFoundException这个异常。

                     3.读数据(可用while循环来读取数据)

                         int content =0;

                         while((content = inputStream.read()) != -1){
          System.out.println((char)content);
         }

                     4.关闭资源

                          inputStream.close();

   输出流:FileOutputStream和BufferedOutputStream

               

使用步骤:

           1.目标 (确定读取的 文件位置)
   2.建立数据传输的 通道
   3.写入文件中的 数据(在写入数据时用write方法)

   4.关闭资源

注意:(1)当使用 FileOutputStream的 write(int b)来写入数据的时候,接受的数据类型 虽然是 int类型实际上 它                     只能给写出 一个 字节的数据(8个位的数据)

           (2)使用FileOutputStream 类 来写入数据到 磁盘的时候, 如果指定的 目标文件 不存在,那么会自己创建这                     个目标文件。

           (3)使用FileOutputStream 类 来写入数据到 磁盘的时候, 如果指定的 目标文件 存在,那么写入的时候会先                     清空文件中原本的数据,然后再写入数据(会覆盖掉原本的内容)。

           (4)如果我们不想覆盖这个已经存在的文件中的内容,那么我们可以 用 FileOutputStream(File file, boolean                       append)  构造输出流对象。

例如:

          1.找到目标文件(用File来创建)

            File file = new File("要找的文件目录");

         2.创建 数据传输的通道

            FileOutputStream outputStream = new FileOutputStream(file);//  注意:如想在后面追加内容应写成(file,     true)

         3.写入数据到 目标文件

            String data = "今天太阳很大!"; 
byte[] b = data.getBytes();
outputStream.write(b, 0, 2);

        4.关闭资源
    outputStream.close();


字节输入流和节输出流的联合应用

例如:

(1)读取的目标文件路径
  File inputFile = new File("读取文件的路径");

(2)写入的目标文件的路径, mokey.jpg是不存在的,是在写入的时候创建的
  File outputFile = new File("要输写的路径");

(3) 建立数据传输的通道
          FileInputStream fileInput = new FileInputStream(inputFile); // 读取文件的通道
  FileOutputStream fileOutput = new FileOutputStream(outputFile);// 输出文件的通道

(4)读取数据(创建缓冲数组,来读取数据)

          byte[] b = new byte[1024];

          int length = 0;

          while((length = fileInput.read(b)) != -1){
     fileOutput.write(b);  // 当读取到数据后写入到要写的目录文件中 用write方法。           

                  }

(5)关闭资源(注意:先开后关, 后开的先关)

         fileOutput.close();
         fileInput.close();


io异常的处理

    异常存在的可能:读取文件时要读取的文件不存在,此时就会出现异常。

   在遇到异常的时候运用我们所学的异常的处理的方法

   方法: try{

               }catch(IOException e){

               }finally{

               }


缓冲输入流:InputStream (父类)  FileInputStream和BufferedInputStream(子类)

缓冲输出流:OutputStream (父类)    FileOutputStream 和 BufferedOutputStream(子类)

  作用:读取文件的数据,使用缓冲数组结合循环的方式,效率更高。

  使用步骤:
  1.找到一个目标文件 (要读取的文件)
  2.建立数据传输的通道
  3.建立 缓冲输入字节流 对象 来读取数据
  4.关闭资源

注意: 实际上 BufferedInputStream这个类的对象本身并不具备读取数据和关闭资源的能力,是靠构造这个对象时提供给他的额FileInputStream对象来实现的


例如:

       1.找到目标文件
          File file = new File("要读取的文件目录");

       2.建立数据传输的通道
  FileInputStream fileInputStream = new FileInputStream(file);

       3.准备用 BufferedInputStream来读取数据
  BufferedInputStream bufferdInputStream = new BufferedInputStream(fileInputStream);

          读取数据(一个一个字节的读取)

          int content = 0;
  while((content = bufferdInputStream.read()) != -1){
       System.out.print((char)content);

           }

       4.关闭资源
   bufferdInputStream.close();


缓冲输出字节流

  注意事项:
   1、使用bufferdOutputStream 写数据的时候,它的 write方法 实际上是先把数据写到了它内部维护的 字节数组中, 没有马上写入到 磁盘中  
   2.(1)在它内部的 数据被填满了,它会自动的写入
      (2)当你调用 flush()方法, 就相当于通知它 把数据写到磁盘中去
      (3)当你调用close()方法,关闭资源的时候, 再也不会有数据写入了,也会立刻写数据到磁盘

例如:1.找到目标文件
File file = new File("要写入的目录");

           2.建立数据传输的通道
FileOutputStream fileOutputStream = new FileOutputStream(file);

           3.准备用 BufferedInputStream来 写入数据
BufferedOutputStream bufferdOutputStream = new BufferedOutputStream(fileOutputStream);
写入数据
 bufferdOutputStream.write("hello world".getBytes(), 0, 10);

           4.关闭资源

               bufferdOutputStream.close();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值