IO如此复杂,IO详解尽在其中

在这里插入图片描述

IO

File类

概念

  • 代表物理盘符中一个文件或文件夹

主要方法

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

FileFilter接口和FileNameFiler接口

  • 当作为list()或listFiles()方法的参数时,可以对文件进行过滤

概念

  • 内存与存储设备传输数据的通道

分类

  • 按方向

    • 输出流

      • 内存->存储设备
    • 输入流

      • 存储设备->内存
  • 按单位

    • 字节流
    • 字符流
  • 按功能

    • 节点流

      • 具有实际传输数据的读写功能
    • 过滤流

      • 在节点流的基础之上增强功能

体系结构图

字节流

主要方法

  • InputStream

    • public int read(){}
    • public int read(byte[] b){}
    • public int read(byte[] b,int off,int len){}
  • OutputStream

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

主要实现类

  • FileOutputStream/FileInputStream

    • 主要方法

      • public void write(byte[] b)

        • 一次写多个字节,将b数组中所有字节,写入输出流
      • public int read(byte[] b)

        • 从流中读取多个字节,将读到内容存入b数组,返回实际 读到的字节数;如果达到文件的尾部,则返回-1
  • BufferedOutputStream/BufferedInputStream

    • 特点

      • 提高IO效率,减少刚问磁盘的次数
      • 数据存储在缓冲区,flush()方法将缓冲区的内容写到文件,也可以用close()方法
    • 主要方法

      • public void flush()
  • ObjectOuputStream/ObjectInputStream

    • 特点

      • 增强了缓冲区功能

      • 增强了读写8种基本数据类型和字符串功能

      • 增强了读写对象的功能

        • readObject() 从流中读取一个对象
        • writeObject(Object obj) 向流中写入一个对象
    • 对象序列化

      • 要求

        • 对象必须实现Serializable(自动化接口)或Externalizable(半自动化接口)
        • 序列化的类要添加一个私有的long类型静态常量:serialVersionUID,保证序列化的类反序列化的类是同一个类
      • 注意

        • 加transient关键字的属性不参与序列化,但实现Externalizable接口可以手动让它参与序列化
        • 静态属性不参与序列化
      • 读取到文件到文件尾部的标志:java.io.EOFException

      • 创建对象的方法

        • new 调用构造方法

        • 反射 调用构造方法

        • 反序列化 Serializable(自动不会调用构造方法) Externalizable(手动会调用构造方法)

        • 克隆 不会调用构造方法

          • 实现方式

            • 类实现Cloneable接口
            • 重写Object类的clone()方法
          • 特点

            • 浅复制

              • 只会将类克隆一遍,不会将类中的引用成员克隆,只会克隆引用成员的一份地址
          • 要实现深复制(类的引用成员还会创建一个对象进行克隆),就必须引用成员的类也实现克隆,并在类中的clone()方法中调用引用类的克隆方法并赋值给应用成员

  • PrintStream

    • 封装了print() / println()方法,支持写入后换行

    • System.out成员就是这个类型,默认输出到控制台

      • System.out是InputStream类型,可以将它包装成InputStreamRedaer转换流,再包装成BufferedReader类实现读取一整行(Scanner底层原理)
    • 可以将其重定向标准输出流,输出到文件中

字符编码

ISO-8859-1

  • 收入除ASCII以外,还包括西欧、希腊语、泰语、阿拉伯语、西伯来语对应的字符

UTF-8

  • 针对Unicode可变长度字符编码

GB2312

  • 简体中文

GBK

  • 简体中文,扩充

BiG5

  • 繁体中文,台湾

try(类名 引用 = new 类名()){

}结构

会自动关闭对象,不过该类必须实现AutoCloseable接口

字符流

主要方法

  • Reader

    • public int read(){}
    • public int read(char[] c){}
    • public int read(char[] b,int off,int len){}
  • Writer

    • public void write(int n){}
    • public void write(String str){}
    • public void write(char[] c){}

特点

  • 一般都带有缓冲区,需要flush()或关闭

实现类

  • FileReader/FileWriter

    • public void write(String str) //一次写多个字符,将b数组中所有字符,写入输出流
    • public int read(char[] c) //从流中读取多个字符,将读到内容存入c数组,返回实际读到 的字符数;如果达到文件的尾部,则返回-1
    • 写要使用flush()方法刷新缓冲区,close()也会默认刷新缓冲区。
  • BufferedReader/BufferedWriter

    • 特点

      • 可支持输入换行符

        • void newLine()
      • 可一次写一行读一行

        • void readLine()
  • InputStreamReader/OutputStreamWriter

    • 特点

      • 是字节流通向字符流的桥梁(InputStreamReader),也是字符流通向字节流的桥梁(OutputStreamWriter)
    • 主要通过构造函数设置字节流和编码集

  • PrintWriter

    • 封装了print() / println()方法,支持写入后换行

RandomAccessFile类

seek(long n)

  • 指针跳到n的位置

skipBytes(int n)

  • 指针跳过n个字节

mode

  • rw
  • r

特点

  • 既可以读文件,也可以写文件
  • 可以跳到文件的任意位置读文件

作用

  • 快速定位,并发读写
  • 方便获取二进制文件

Properties

list()方法

  • 参数为打印流(PrintStream/PrintWriter),遍历输出到流

store()方法

  • 参数为字节输出流或字符输出流

load()方法

  • 参数为字节输入流或字符输入流
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值