编程体系结构(04):JavaIO流文件管理
本文源码:GitHub·点这里 || GitEE·点这里
一、IO流分类
1、分类角度
流的方向
- 输入流:从数据源中读取数据到应用中的流;
- 输出流:从应用中将数据写入到目的地的流;
流数据类型
- 字节流:以字节形式来读写的流,标识是名称以Stream结尾;
- 字符流:以字符形式来读写的流,标识是名称以Writer、Reader结尾;
- 管道流:以数据块为单位来处理,缓冲区就是用于读写的数据块;
流的角色
- 节点流:可以从一个节点或者向一个节点读/写数据的流,也被称为低级流;
- 处理流:对存在的流进行连接或者封装、封装后的流来进行读/写、也被称为高级流。
2、API体系
5个核心类ObjectOutputStream:File、OutputStream、InputStream、Writer、Reader;
1关键接口:Serializable;
二、API细节分类
1、字节输入流
InputStream:字节输入流是所有字节输入流的父类、为所有字节输入流提供一个标准、和基本的与读取字节有关的方法及简单的实现。
FileInputStream:文件字节输入流以字节的形式将文件中数据读取到应用中;
BufferedInputStream:缓冲字节输入流,提供缓冲功能,提高效率;
ByteArrayInputStream:字节数组输入流用于读取其内置缓存字节数组中的字节;
PipedInputStream:管道字节输入流必须与PipedOutputStream结合使用,用于线程之间的通信;
FilterInputStream:过滤器字节输入流,重写InputStream方法,为字节输入处理流提供扩展;
DataInputStream:数据字节输入流,一般与DataOutputStream结合使用;
ObjectInputStream:对象字节输入流,与ObjectOutputStream结合使用;
2、字节输出流
OutputStream:字节输出流,InputStream作用一样,为所有字节输出流提供一个标准、定义了一些基本输出字节的方法与简单实现;
FileOutputStream:文件字节输出流,将字节写入指定目标的文件源中;
BufferedOutputStream:缓冲字节输出流,提供缓冲功能、提高效率;
ByteArrayOutputStream:字节数组输出流,将字节写入到其本身所带的一个内置缓存字节数组中;
PipedoutputStream:管道字节输出流,必须与PipedInputStream结合使用、用于线程之间的通信;
FilterOutputStream:过滤字节输出流,为字节输出处理流提供扩展;
DataOutputStream: 数据字节输出流,一般与DataInputStream结合使用;
ObjectOutputStream:对象字节输出流,通常与ObjectInputStream结合使用;
PrintStream:字节打印流,字节输出流进行装饰、提供打印各种数据类型的功能;
3、字符输入流
Reader:字符输入流,为所有字符输入流提供一个标准、只有基本的读取方法的定义和简单的实现;
InputStreamReader:字节转换流,将字节流转换成字符流,并且可以指定字节转成字符时使用的编码;
BufferedReader:缓冲字符输入流,为字符输入流提供缓冲功能、提高效率;
CharArrayReader:字符数组输入流,将其内置字符缓存数组中的数据读取到应用中;
PipedReader:管道字符输入流,与PipedWriter结合使用、用于线程之间的通信;
FilterReader:过滤字符输入流,为字符输入流提供扩展;
FileReader:文件字符输入流,字符的形式读取文件中的内容;
4、字符输出流
Writer:字符输出流,所有字符输出流提供一个标准,基本写入的方法和简单的实现;
OutputStreamWriter:字节输出转换流,用于将字节输出流转化成字符输出流。可以指定编码转化;
BufferedWriter:缓存字符输出流,提供缓冲功能、提高效率;
CharArrayWriter:字符输出流,用于将字符写入其内置缓存字符数组中;
PipedWriter:管道字符输出流,与PipedReader结合使用,用于线程之间的通信;
FileWriter:文件字符输出流,用于将字符写入到指定文件中;
PrintWriter:字符打印流,将各种数据以字符的形式打印;
三、File文件类
1、构造方法
File(String pathname):指定文件或者文件夹的路径创建一个File文件;
File(File parent,String child):根据parent抽象路径名和child路径名字符创建新的File实例;
2、路径问题
绝对路径:该文件在硬盘上的完整路径。绝对路径一般都是以盘符开头的。
相对路径: 相对路径就是资源文件相对于当前程序所在的路径。
. 当前路径
.. 上一级路径
3、文件的创建
createNewFile():在指定位置创建一个空文件,成功返回true,已存在就不创建然后返回false;
mkdir():在指定位置创建目录,这只会创建最后一级目录,上级目录不存在就抛异常;
mkdirs():在指定位置创建目录,这会创建路径中所有不存在的目录;
4、删除文件
delete() 删除文件或者一个空的文件夹,如果文件夹且不为空,则不能删除,成功返回true,失败返回false;
5、判断方法
exists():文件或文件夹是否存在;
isFile():是否是一个文件,如果不存在,则始终为false;
isDirectory():是否是一个目录,如果不存在,则始终是false;
6、获取文件信息
getName():获取文件或文件夹名称,不包含上级路径;
getPath():返回绝对路径,可以是相对路径,但是目录要指定
四、编码解码
字节流读取的是文件中的二进制数据,不会自动转为可以看懂的字符;字符流:把读到的数据进行对应的编码与解码。
五、源代码地址
GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile
推荐阅读:编程体系整理
序号 | 项目名称 | GitHub地址 | GitEE地址 | 推荐指数 |
---|---|---|---|---|
01 | Java描述设计模式,算法,数据结构 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
02 | Java基础、并发、面向对象、Web开发 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
03 | SpringCloud微服务基础组件案例详解 | GitHub·点这里 | GitEE·点这里 | ☆☆☆ |
04 | SpringCloud微服务架构实战综合案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
05 | SpringBoot框架基础应用入门到进阶 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
06 | SpringBoot框架整合开发常用中间件 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
07 | 数据管理、分布式、架构设计基础案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
08 | 大数据系列、存储、组件、计算等框架 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |