IO流

  • IO流分类 按照操作的数据不同分类

    • 字节流

      • 操作的是一个个的字节,字节是计算机中最基本的单位,一切数据都是由字节构成的

        1. 所以字节流可以操作计算机上一切数据 比如 文本 视频 音频 图片等等
    • 字符流

      • 操作的是一个个的字符,只能操作文本文件
      • 什么是文本文件:使用记事本打开不乱码的文件 比如:.txt .java .css .html .js .xml
      • 注意:word和excel不是文本文件
  • 按照流向不同
    • 输入流 Input
    • 输出流 Output
  • 字节输入流
    • InputStream
      • read 读字节
    • FileInputStream
  • 字节输出流
    • OutputStream
      • write写字节
    • FileOutputStream
  • 字符输入流
    • Reader
      • read 读字符
    • FileReader
  • 字符输出流
    • Writer
      • write 写字符
    • FileWriter
  • IO流的命名规则:一般情况下都是前面是这个流能干什么 后面是这个流的顶级父类是谁

java.io.OutputStream 所有字节输出流的超类 抽象类

  • 方法
    • void write(int b) 写一个字节
    • void write(byte[] bytes)写一个字节数组
    • void write(byte[] bytes,int start,int length)写一个字节数组的一部分
    • void close()关闭资源
  • 常用子类

    • java.io.FileOutputStream

      • 构造方法 绑定数据目的
        • public FileOutputStream(File file)
        • public FileOutputStream(String path)
      • 注意:如果指定位置没有对应的文件则创建一个新的空文件

                         如果指定位置已经有了对应的文件 则覆盖<br />                             如果路径不存在 则抛出FileNotFoundException              
        
  1. 创建FileOutputStream对象
  2. 调用write方法
  3. 关闭资源

文件的续写与换行

  • 文件的续写

    • FileOutputStream
      • 构造方法
        • public FileOutputStream(File file,boolean append)
        • public FileOutputStream(String path,boolean append)
        • boolean append:如果值为true 不会覆盖原文件 而是在原本的文件上 追加写入
      • 换行
        • \r\n

          java.io.InputStream 所有字节输入流的超类 抽象类

  • 方法

    • int read()读一个字节 返回值为读取到的数据 如果没有数据了 返回-1
    • int read(byte[]bytes)读一个字节数组
    • void close()关闭资源
  • 常用子类
    • java.io.FileInputStream
      • 构造方法 绑定数据源
        • public FileInputStream(File file)
        • public FileInputStream(String path)
  1. 创建字节输入流对象
  2. 调用read方法读取数据
  3. 关闭资源

使用字节流读中文 可以读取中文 但是不方便我们查看 因为 我们不认识字节
但是我们认识字符 所以当查看文本数据时 一般选择使用字符流

java.io.Reader 字符输入流的超类 抽象类

  • 方法

    • int read()读一个字符 返回值是读取的字符 如果没有数据 则返回-1
    • int read(char[] chs)读一个字符数组

           字符数组作为缓冲区 数据都存放在字符数组中 返回值返回每次读取的有效字符数 如果没有数据返回-1
      
    • int close()关闭资源

  • 常用子类
    • java.io.FileReader
      • 构造方法 绑定数据源
        • public FileReader(File file)
        • public FileReader(String path)
  1. 创建字符输入流对象
  2. 调用read方法读数据
  3. 关闭资源

java.io.Writer 所有字符输出流的超类 抽象类

  • 方法
    • write(int c) 写一个字符
    • write(char[] chs)写一个字符数组
    • write(char[] chs,int start,int length)写字符数组的一部分
    • write(String s)写字符串
    • flush()刷新缓冲区 不刷新数据不进入到数据目的
    • close()关闭资源
  • 常用子类
    • java.io.FileWriter
      • 构造方法
        • public FileWriter(File file)
        • public FileWriter(File file,boolean append)
  • 字符输出流 写数据后必须刷新 不刷新数据不进入到数据目的
  • flush和close的区别

       flush叫做刷新缓冲区 将数据从缓冲区中刷新到数据目的 对于字符输出流  必须要刷新<br />         刷新后 还可以继续写数据<br />         close叫做关闭资源  只是在关闭之前会进行一次刷新 流关闭后 不能再写数据了 会抛异常
    

java.util.Properties

  • 特点
  1. 实现了Map接口 可以使用Map的所有方法
  2. 没有泛型 键是String 值String
  3. 唯一一个可以和IO流直接结合使用的集合
  • 方法

    • Object setProperty(String key,String value) 添加元素 相当于 Map的put方法
    • String getProperty(String key)根据键找值 相当于 Map的get方法
    • SetstringPropertyNames()返回所有键的Set集合 相当于Map的keySet方法

      java.util.Properties

  • 和IO流结合使用

    • void load(InputStream in) 将配置文件中的键值对加载到集合中
    • void load(Reader r)
    • InputStream in:所有字符输入流的超类 抽象类

                                   可以传入其任意子类对象 FileInputStream
      
    • Reader r:所有字符输入流的超类 抽象类

                         可以传入其任意子类对象 FileReader