Java之IO

1. io的概述:

数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。

  • 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
  • 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

我们把这种输入和输出动作称为IO操作。

IO使用场景:

  • 上传头像
  • 发送附件
  • 微信传文件
  • ……

2. File与Stream的关系:

File(文件)在API中这样解释:File是文件和目录路径名的抽象表示。而我们实际上可以用File来操作盘符、文件、目录。

stream表示流

File和Stream之间就像水杯和水的关系,File就像水杯,Stream就像是水杯里面的水

  • 水杯是水的容器,水是水杯的内容。
  • 文件是流的容器,流是文件的内容。

3. 输入流和输出流:

输入流:Java程序得到了数据,就是输入流
输出流:Java程序对外提供了数据,就是输出流。

1658847732009.png

File

1. File的简介

File(文件)在API中这样解释:File是文件和目录路径名的抽象表示。而我们实际上可以用File来操作盘符、文件、目录。

2. File类的构造函数

构造函数 描述
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri) 通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。

3. File类的方法

创建完了File对象之后,那么File类中都有如下常用方法,可以获取文件相关信息

返回值 方法名 描述
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead() 测试应用程序是否可以读取由此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改由此抽象路径名表示的文件。
boolean createNewFile() 当且仅当具有该名称的文件尚不存在时,原地创建一个由该抽象路径名命名的新的空文件。
boolean delete() 删除由此抽象路径名表示的文件或目录。
File getAbsoluteFile() 返回此抽象路径名的绝对形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
long getFreeSpace() 返回分区未分配的字节数 named此抽象路径名。
String getName() 返回由此抽象路径名表示的文件或目录的名称。
String getParent() 返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。
File getParentFile() 返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。
String getPath() 将此抽象路径名转换为路径名字符串。
long getTotalSpace() 通过此抽象路径名返回分区 named的大小。
long getUsableSpace() 返回上的分区提供给该虚拟机的字节数 named此抽象路径名。
boolean isDirectory() 测试此抽象路径名表示的文件是否为目录。
boolean isFile() 测试此抽象路径名表示的文件是否为普通文件。
boolean isHidden() 测试此抽象路径名命名的文件是否为隐藏文件。
long lastModified() 返回此抽象路径名表示的文件上次修改的时间。
long length() 返回由此抽象路径名表示的文件的长度。
String[] list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter) 返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
static File[] listRoots() 列出可用的文件系统根。
boolean mkdir() 创建由此抽象路径名命名的目录。
boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
boolean renameTo(File dest) 重命名由此抽象路径名表示的文件。
boolean exists() 文件或目录是否存在

Stream

1. 流的分类

  • 输入流和输出流

    • 输入流的基类:InputStream

    • 输出流的基类:outputStream

  • 字节流和字符流

    • 字节流:类名包含了Stream

    • 字符流:类名包含了Reader或Writer

  • 转换流

    • 以字符流读取字节流 InputStreamReader

    • 以字符流写入字节流 OutputStreamWriter

  • 随机访问流:RandomAccessFile

  • 缓存流:利用缓冲区提升性能

    • BufferedInputStream

    • BufferedOutputStream

  • 对象流:序列化和反序列化

    • 序列化:ObjectOutputStream

    • 反序列化:ObjectInputStream

  • 数据流:数据流就是将指定的数据类型读取或写入

    • 读取:DataInputStream

    • 写入:DataOutputStream

2. 设计原则

83mKMpkiTBNDlQn.png

3. 流的操作流程

不管是输入流还是输出流,其操作过程都包括以下三个过程

第一步:打开流:通过File类或者网络或者其他打开流

第二步:操作流:读写流

第三步:关闭流:以释放和这个流相关的系统资源

Java IO模型

java中常见的三种IO模型:

BIO(Blocking I/O)同步阻塞

1658842791659.png

NIO(Non-blocking/new I/O)I/O多路复用

1658843146640.png

AIO(Asynchronous I/O)异步

1658843173144.png

commons-IO

  • Java IO操作是开发中比较常用的技术,但是如果每次都使用原生的IO流来操作会显得比较繁琐。
  • Common IO 是一个工具库,用来帮助开发IO功能, 它包括6个主要部分:
    • Utility classes – 工具类,包括一些静态方法来执行常用任务
    • Input – 输入,InputStream 和 Reader 实现
    • Output – 输出,OutputStream 和 Writer 实现
    • Filters – 过滤器,多种文件过滤器实现(定义了 IOFileFilter接口,同时继承了 FileFilter 和 FilenameFilter 接口)
    • Comparators – 比较器,用于文件比较的多种java.util.Comparatot实现
    • File Monitor–文件监控

commons-IO里的两个常用类

  • FilenameUtils
  • FileUtils

【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容