Java-IO流

1 IO流的介绍

1.1 为什么要学习IO流

  • 通过变量,数组,或者集合存储数据

    • 都是不能永久化存储 , 因为数据都是存储在内存中

    • 只要代码运行结束,所有数据都会丢失

  • 使用IO流

    • 1,将数据写到文件中,实现数据永久化存储

    • 2,把文件中的数据读取到内存中(Java程序)

1.2 什么是IO流

  • I 表示intput ,是数据从硬盘进内存的过程,称之为读。

  • O 表示output ,是数据从内存到硬盘的过程。称之为写

  • IO的数据传输,可以看做是一种数据的流动,按照流动的方向,以内存为参照物,进行读写操作

    • 简单来说:内存在读,内存在写

1.3 IO流的分类

  • 按照流向区分

    • 输入流 : 用来读数据

    • 输出流 : 用来写数据

  • 按照类型区分

    • 字节流

    • 字符流

  • 注意 :

    • 字节流可以操作任意文件

    • 字符流只能操作纯文本文件

    • 用windows记事本打开能读的懂,那么这样的文件就是纯文本文件。

2 字节流输出流

2.1 字节输出流入门

  • FileOutputStream类 :
    • OutputStream有很多子类,我们从最简单的一个子类开始。

    • java.io.FileOutputStream类是文件输出流,用于将数据写出到文件

  • 构造方法 :
    • public FileOutputStream(File file):创建文件输出流以写入由指定的 File对象表示的文件。

    • public FileOutputStream(String name): 创建文件输出流以指定的名称写入文件。

      public class FileOutputStreamConstructor throws IOException {
          public static void main(String[] args) {
         	 	// 使用File对象创建流对象
              File file = new File("a.txt");
              FileOutputStream fos = new FileOutputStream(file);
            
              // 使用文件名称创建流对象
              FileOutputStream fos = new FileOutputStream("b.txt");
          }
      }

字节输出流写数据快速入门
  • 创建字节输出流对象。

  • 写数据

  • 释放资源

    public class OutputStreamDemo1 {
        public static void main(String[] args) throws IOException {
            // 创建字节输出流对象
            // 如果指定的文件不存在 , 会自动创建文件
            // 如果文件存在 , 会把文件中的内容清空
            FileOutputStream fos = new FileOutputStream("day11_demo\\a.txt");
    
            // 写数据
            // 写到文件中就是以字节形式存在的
            // 只是文件帮我们把字节翻译成了对应的字符 , 方便查看
            fos.write(97);
            fos.write(98);
            fos.write(99);
    
            // 释放资源
            // while(true){}
            // 断开流与文件中间的关系
            fos.close();
        }
    }

2.2 字节输出流写数据的方法

  • 字节流写数据的方法

    • 1 void write(int b) 一次写一个字节数据

    • 2 void write(byte[] b) 一次写一个字节数组数据

    • 3 void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据

      import java.io.FileNotFoundException;
      import java.io.FileOutputStream;
      import java.io.IOException;
      
      /*
          字节流写数据的3种方式
              1 void write​(int b)	一次写一个字节数据
              2 void write​(byte[] b)	一次写一个字节数组数据
              3 void write​(byte[] b, int off, int len)	一次写一个字节数组的部分数据
       */
      public class OutputStreamDemo2 {
          public static void main(String[] args) throws IOException {
              // 创建字节输出流对象
              FileOutputStream fos = new FileOutputStream("day11_demo\\a.txt");
      
              // 写数据
      //        1 void write​(int b)	一次写一个字节数据
              fos.write(97);
              fos.write(98);
              fos.write(99);
      
      //        2 void write​(byte[] b)	一次写一个字节数组数据
              byte[] bys = {65, 66, 67, 68, 69};
              fos.write(bys);
      
      //        3 void write​(byte[] b, int off, int len)	一次写一个字节数组的部分数据
              fos.write(bys, 0, 3);
      
              // 释放资源
              fos.close();
          }
      }

2.3 写数据的换行和追加写入

3 字节输入流

3.1 字节输入流介绍

  • 字节输入流类
    • InputStream类 : 字节输入流最顶层的类 , 抽象类 --- FileInputStream类 : FileInputStream extends InputStream

  • 构造方法
    • public FileInputStream(File file) : 从file类型的路径中读取数据

    • public FileInputStream(String name) : 从字符串路径中读取数据

  • 步骤
    • 创建输入流对象

    • 读数据

    • 释放资源

3.2 字节输入流读多个字节

3.3 图片的拷贝

3.4 异常的捕获处理

  • JDK7版本之前处理方式 : 手动释放资源
JDK7版本优化处理方式 : 自动释放资源
  • JDK7优化后可以使用 try-with-resource 语句 , 该语句确保了每个资源在语句结束时自动关闭。 简单理解 : 使用此语句,会自动释放资源 , 不需要自己在写finally代码块了

  • 格式 :

3.4 字节输入流一次读一个字节数组

  • FileInputStream类 :

    • public int read(byte[] b) : 从输入流读取最多b.length个字节的数据, 返回的是真实读到的数据个数

4 字节缓冲区流

4.1 字节缓冲流概述

  • 字节缓冲流:

    • BufferOutputStream:缓冲输出流

    • BufferedInputStream:缓冲输入流

  • 构造方法:

    • 字节缓冲输出流:BufferedOutputStream(OutputStream out)

    • 字节缓冲输入流:BufferedInputStream(InputStream in)

  • 为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?

    • 字节缓冲流仅仅提供缓冲区,不具备读写功能 , 而真正的读写数据还得依靠基本的字节流对象进行操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值