1. io的概述:
数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。
- 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
- 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。
我们把这种输入和输出动作称为IO操作。
IO使用场景:
- 上传头像
- 发送附件
- 微信传文件
- ……
2. File与Stream的关系:
File(文件)在API中这样解释:File是文件和目录路径名的抽象表示。而我们实际上可以用File来操作盘符、文件、目录。
stream表示流
File和Stream之间就像水杯和水的关系,File就像水杯,Stream就像是水杯里面的水
- 水杯是水的容器,水是水杯的内容。
- 文件是流的容器,流是文件的内容。
3. 输入流和输出流:
输入流:Java程序得到了数据,就是输入流
输出流:Java程序对外提供了数据,就是输出流。
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. 设计原则
3. 流的操作流程
不管是输入流还是输出流,其操作过程都包括以下三个过程
第一步:打开流:通过File类或者网络或者其他打开流
第二步:操作流:读写流
第三步:关闭流:以释放和这个流相关的系统资源
Java IO模型
java中常见的三种IO模型:
BIO(Blocking I/O)同步阻塞
NIO(Non-blocking/new I/O)I/O多路复用
AIO(Asynchronous I/O)异步
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资源网邮箱处理】
暂无评论内容