Java IO框架
1.流
-
概念
流是内存与存储设备之间传输数据的通道
-
流的分类
- 按方向
- 输入流:将存储设备中的内容读入到内存中
- 输出流:将内存中的内容写入到存储设备中
- 按单位
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
- 按功能
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础上增强功能
- 按方向
2.字节流
2.1字节流的父类(抽象类)
-
InputStream:字节输入流
-
OutputStream:字节输出流
-
常用方法
2.2FileInputStream(读)和FileOutputStream(写)
- FIleInputStream:
- public int read (byte [] b) 从流中读取多字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
- FileOutputStream:
- public void write (byte [] b) 一次写多个字节,将b数组中所有字节,写入输出流
- 例子:使用FileInputStream和FileOutputStream完成文件复制
2.3字节缓冲流
-
缓冲流:BufferedInputStream/BufferedOutputStream
- 提高IO效率,减少访问磁盘的次数
- 数据存储在缓冲区,flush将缓存区的内容写入文件中,也可以直接关闭
-
BufferedInputStream使用
- BufferedOutputStream使用
3.对象流
3.1对象流:ObjectOutputStream/ObjectInputStream
- 增强了缓冲区功能
- 增强了读写8中基本数据类型和字符串功能
- 增强了读写对象的功能
- readObject() 从流中读取一个对象
- writeObject(Object obj) 向流中写入一个对象
- 使用流传输对象的过程称为序列化、反序列化
3.2 序列化
- 使用ObjectOutputStream实现序列化
- 序列化的类必须要实现Serializable接口
3.3 反序列化
- 使用ObjectInputStream实现反序列化(读取重新构成对象)
- 反序列化只能重构一次对象
3.4 序列化和反序列化注意事项
- 序列化类必须要实现Serializable接口
- 序列化类中对象属性要求实现Serializable接口
- 要添加序列化版本号ID,保证序列化和反序列化的类是同一个类
- 使用transient(瞬态的)关键字修饰的属性,不会进行序列化
- 静态属性不会进行序列化
- 序列化多个对象时,可以借助集合实现
4. 字符流
4.1 字符编码
- ISO-8859-1:ASCII、西欧、希腊语、泰语、阿拉伯语、希伯来语
- UTF-8:针对Unicode码表的可变长度字符编码
- GB2312:简体中文
- GBK:简体中文、扩充
- BIG5台湾,繁体中文
4.2 字符流
- 字符流的父类(抽象类)
- Reader:字符输入流
- Writer:字符输出流
4.3 文件字符流FileReader/FileWriter
- FileReader:
- public int read (char [] c) //从流中读取多个字符,将读到内容存入c数组中,返回实际读到的字符数;如果达到文件尾部则返回-1
- FileWriter
- public void writer (String str) //一次写多个字符,将b数组中所有字符写入输出流。
-
使用FileReader ()和FileWriter() 来复制文件
- 注意因为涉及到字符的转码问题,只能够幅值文本文件,不能够复制图片、视频、音频等二进制文件。
4.4 字符缓冲流BufferedReader/BufferedWriter
-
缓冲流BufferedReader/BufferedWriter
- 高效读写
- 支持输入换行符
- 可一次写一行、读一行
-
使用字符缓冲流BufferedReader读取文件
- 使用字符缓冲流BufferedWriter写入文件
5. 打印流PrintWriter
- PrintWriter:
- 封装了print () /println () 方法,支持写入后换行
- 支持数据原样打印(数字,字符,true,字符串)
6. 转换流
-
桥转换流:InputStreamReader/OutputStreamWriter
-
可以将字节流转换为字符流
-
可设置字符的编码方式
-
-
使用InputStreamReader读取数据,并指定编码
- 使用OutputStreamWriter输出数据,并指定编码
7. File类(文件和文件夹)
- 概念:代表物理盘符中的一个文件或者文件夹
- File类的使用
- 分隔符(路径分隔符;File.pathSeparator) (名称分隔符\ File.separator)
- 文件操作
- 文件夹操作
- 方法
- createNewFile() 创建一个新文件
- mkdir() 创建一个新目录
- delete() 删除文件或者空目录
- exists() 判断File对象所代表的对象是否存在
- getAbsolutePath() 获取文件的绝对路径
- getName() 获取名字
- getParent() 获取文件或目录所在的目录
- isDirectory() 是否是目录
- isFile() 是否是文件
- length() 获取文件的长度
- listFiles() 列出目录中所有内容
- renameTo() 修改文件名
7.1 文件操作
- 分隔符
- 创建文件
- 删除文件
- 获取文件信息
- 判断文件信息
7.2 文件夹操作
- 创建文件夹
- 删除文件夹
- 获取文件夹信息
- 判断文件夹信息
- 遍历文件夹
7.3 FileFilter接口
- public interface FileFilter
- boolean accept (File pathname)
- 当调用File类中的listFiles () 方法时,支持传入FileFilter接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在ListFiles ()的返回值中。
7.4 例子:递归遍历和递归删除文件夹
- 要求递归遍历文件夹和递归删除文件夹,包括所有的子文件夹
- 文件夹中含有文件是不能被删除的,必须先删除文件
8. Properties属性集合
-
特点
- Properties集合中主要存储属性名和属性值
- 属性名和属性值都是字符串类型
- 没有泛型
- 和流有关,能使用流输出和读入Properties属性
9. 总结
- 流的概念
- 内存与存储设备之间传输数据的通道
- 流的分类
- 输入流、输出流
- 字节流、字符流
- 节点流、过滤流
- 序列化、反序列化
- 将对象通过流写入到文件,或将对象通过流读取到内存,必须实现Serializable接口
- File对象
- 代表物理盘符中的一个文件或者文件夹
__EOF__

本文作者:Ray963
本文链接:https://www.cnblogs.com/ray93/p/16273061.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/ray93/p/16273061.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:{Ray963},转载请注明原文链接:{https://www.cnblogs.com/ray93/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具