Java I/O框架

Java I/O框架

什么是流

概念:内存与存储设备之间传输数据的通道

水借助管道传输; 数据借助流传输

流的分类

  • 按方向(重点) 以内存为参照
    • 输入流 input:将<存储设备>中的内容读入到<内存>中
    • 输出流 output: 将<内存>中的内存写入到<存储设备>中

  • 按单位
    • 字节流: 以字节为单位,可以读写所有数据
    • 字符流: 以字符为单位,只能读写文本数据
  • 按功能
    • 字节流/底层流: 具有实际传输数据的读写功能
    • 过滤流: 在节点流的基础之上增强功能

字节流抽象类

  • 字节流的父类(抽象类)

    • InputStream: 字节输入流

    • public int read(){}
      public int read(byte[] b){}
      public int read(byte[] b, int off, int len){}
      off是偏移量,即从数组b的第off个位置起读取 len个字节。
      
    
    
    
  • OutputStream: 字节输出流

    • public void write(int n){}
      public void write(byte[] b){}
      public void write(byte[] b, int off, int len){}
      

文件字节流

  • FileInputStream:
    • public int read(byte[] b);//从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1

  • FileOutputStream:
    • public void write(byte[] b);//一次写多个字节,将b数组中所有字节,写入输入流

复制图片的案例

字节缓冲流

  • 缓冲流:BufferedInputStream/BufferedOutputStream
    • 提高IO效率,减少访问磁盘的次数
    • 数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close

对象流

  • 对象流:ObjectOutputStream/ObjectInputStream
    • 增强了缓冲区功能
    • 增强了读写8中基本数据类型和字符串功能
    • 增强了读写对象的功能
      • readObject() 从流中读取一个对象
      • writeObject(Object obj) 向流中写入一个对象

使用流传输对象的过程成为序列化,反序列化

字符编码

  • ISO-8859-1 收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号
  • UTF-8 针对Unicode码表可变长度字符编码
  • GB2312 简体中文
  • GBK 简体中文、扩充
  • BIG5 台湾,繁体中文

当编码方式和解码方式不一致时,会出现乱码

字符流

  • 字符流的父类(抽象类):

    • reader:字符输入流
    public int read(){}
    public int read(char[] c){}
    public int read(char[] b,int off,int len){}
    
    • write: 字符输出流
    public void write(int n){}
    public void write(String str){}
    public void write(char[] c){}
    

文件字符流

FileReader:

​ public int read(char[] c)//如果流中读取多个字符,将读到内容 存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1

FileWriter:

​ public void write(String str)//一次写多个字符,将b数组中所有字符,写入输出流

字符流复制

字符缓冲流

  • 缓冲流:BufferedReader/BufferedWriter
    • 高效读写
    • 支持输入换行符
    • 可一次写一行,读一行

打印流

  • PrintWriter:
    • 封装了print() / println()方法,支持写入后换行
    • 支持数据原样打印

转换流

  • 桥转换流:InputStreamReader/OutputStreamWriter
    • 可将字节流转换为字符流
    • 可设置字符的编码方式

File类

  • 概念:代表物理盘符中的一个文件或者文件夹

  • 方法

  • createNewFile();//创建一个新文件
    mkdir();//创建一个新目录
    delete();//删除文件或空目录
    exists();//判断File对象所代表的对象是否存在
    getAbsolutePath();//获取文件的绝对路径
    getName();//取得名字
    getParent();//获取文件/目录所在的目录
    isDirectory();//是否是目录
    ifFile();//是否是文件
    length();//获取文件的长度
    listFiles();//列出目录中的所有内容
    renameTo();//修改文件名为..
    

文件操作

文件夹操作

FileFilter接口

  • public interface FileFilter
    • boolean accept(File pathname)
  • 当调用FIle类中的listFiles()方法时,支持传入FileFilter接口 接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFiles()的返回值中

案例:递归遍历删除文件和文件夹

补充:Properties

  • Properties:属性集合
  • 特点
    • 存储属性名和属性值
    • 属性名和属性值都是字符串类型
    • 没有泛型
    • 和流有关

posted @ 2021-03-12 16:10  弹琴的猫  阅读(44)  评论(0)    收藏  举报