1.IO流的介绍

1.1为什么要学习IO流

  • 通过变量,数组,或者集合存储数据
    • 都是不能永久化存储,因为数据都是存储在内存中
    • 只要代码运行结束,所有数据都会丢失
  • 使用IO流

    1. 将数据写到文件中,实现数据永久化存储
    2. 把文件中的数据读取到内存中(java程序)

      1.2什么是IO流

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

  • O:output,是数据从内存到硬盘的过程,称之为写。
  • IO的数据传输,可以看做是一种数据的流动,按照流动的方向,以内存为参照物,进行读写操作

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

      1.3IO流的分类

  • 按照流向区分:

    • 输入流:用来读数据
    • 输出流:用来写数据
  • 按照类型区分:
    • 字节流
    • 字符流
  • 注意:

    • 字节流可以操作任意文件
    • 字符流只能操作纯文本文件
    • 用windows记事本打开能读的懂,那么这样的文件就是纯文本文件

      2字节流输出流

      2.1字节输出流入门

  • FileOutputStream类:

    • OutputSteam有很多子类,我们从最简单的一个子类开始
    • java.io.FileOutputStream类是文件输出流,用于将数据写出到文件
  • 构造方法:
    • public FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件
    • public FileOutputStream(String name):创建文件输出流以指定的名称写入文件
  • 字节输出流写数据快速入门

    • 创建字节输出流对象
    • 写数据
    • 释放资源

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

  • 字节流写数据的方法

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

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

      1.字节流写数据如何实现换行呢?
  • 写完数据后,加换行符

  • windows : \r\n
  • linux : \n
  • mac : \r

2.字节流写数据如何实现追加写入呢?

  • 通过构造方法 : public FileOutputStream(String name,boolean append)
  • 创建文件输出流以指定的名称写入文件。如果第二个参数为true ,不会清空文件里面的内容

    3.字节输入流

    3.1字节输入流介绍

  • 字节输入流

    • InputStream流:字节输入流的最顶层的类,抽象类
    • —- FileInputStream类 : FileInputStream extends InputStream
  • 构造方法
    • public FileInputStream(File file) : 从file类型的路径中读取数据
    • public FileInputStream(String name) : 从字符串路径中读取数据
  • 步骤

    • 创建输入流对象
    • 读数据
    • 释放资源

      3.2字节输入流读多个字节

      字节输入流写数据快速入门 : 读多个字节
      第一部分 : 字节输入流类
      InputStream类 : 字节输入流最顶层的类 , 抽象类
      —- FileInputStream类 : FileInputStream extends InputStream
      第二部分 : 构造方法
      public FileInputStream(File file) : 从file类型的路径中读取数据
      public FileInputStream(String name) : 从字符串路径中读取数据
      第三部分 : 字节输入流步骤
      1 创建输入流对象
      2 读数据
      3 释放资源

      3.3异常的捕获处理

  • JDK7版本之前处理方式 : 手动释放资源

  • JDK7版本优化处理方式 : 自动释放资源

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

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

  • FileInputStream类 :

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

      4.Properties

      4.1集合概述

  • properties是一个Map体系的集合类

    • public class Properties extends Hashtable
  • 为什么在IO流部分学习Properties
    • Properties中有跟IO相关的方法
  • 当做双列集合使用

    • 不需要加泛型 , 工作中只存字符串

      4.2Properties作为集合的特有方法

  • Object setProperty(String key, String value) 设置集合的键和值,都是String类型,相当于put方法

    • String getProperty(String key)使用此属性列表中指定的键搜索属性 , 相当于get方法
    • Set stringPropertyNames()从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串 , 相当于keySet方法

      4.3properties中和IO相关的方法

  • void load(InputStream inStream) 以字节流形式 , 把文件中的键值对, 读取到集合中

  • void load(Reader reader) 以字符流形式 , 把文件中的键值对, 读取到集合中
  • void store(OutputStream out, String comments) 把集合中的键值对,以字节流形式写入文件中 , 参数二为注释
  • void store(Writer writer, String comments) 把集合中的键值对,以字符流形式写入文件中 , 参数二为注释

    5.ResourceBundle加载属性文件

  • 学习目标:能够熟练使用ResourceBundle工具类快速读取属性文件的值

    5.1API介绍

  • java.util.ResourceBundle它是一个抽象类,我们可以使用它的子类PropertyResourceBundle来读取以.properties结尾的配置文件。

    5.2内容小结

  • 如果要使用ResourceBundle加载属性文件,属性文件需要放置在哪个位置?

    • src的根目录
  • 请描述使用ResourceBundle获取属性值的大致步骤是怎样的?
    • 1 获取ResourceBundle对象
    • 2 通过ResourceBundle类中的getString(key) : 根据键找值