I/O框架
I/O框架
- I:input输入 O:output输出
流
- 内存和存储设备之间传输数据的通道
- 水借助管道传输:数据借助流传输
- 按方向划分
- 输入流:将存储设备中的内容读入到内存中
- 输出流:将内存中的内容写入到存储设备中
-
按单位
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
-
按功能
- 节点流:具有实际传输数据的读写功能
- 过滤流:在节点流的基础上增强功能
-
字节流的父类(抽象类)
-
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){}
-
-
字节流的子类
-
文件字节流
-
FileInputStream
public int read(byte[] b)//从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
-
FileOutputStream
public void write(byte[] b)//一次写多个字节,将b数组中所有字节,写入输出流
-
通过文件字节流实现文件复制
-
-
-
字节缓冲流
-
缓冲流:BufferedInputStream/BufferedOutputStream
- 提高io效率,减少访问磁盘的次数
- 数据存储在缓冲区中,flush是将缓冲区的内容写入到文件中,也可以直接close
- BufferedInputStream
- BufferedOutputStream
-
-
对象流:ObjectOutputStream/ObjectInputStream
-
增强了缓冲区的功能
-
增强了读写8种基本数据类型和字符串功能
-
增减了读写对象的功能
- readObject()从流中读取一个对象
- writeObject(Object obj)向流中写入一个对象
-
序列化:Java对象转成其他对象(比如文件对象),就叫序列化,反过来就是反序列化
-
序列化和反序列化注意事项
- 如果要使对象序列化,对象类必须实现Serializable标记接口
- 序列化类中的对象属性也要求实现Serializable标记接口
- 序列化版本号ID,保证序列号的类和反序列化的类是同一个类(IDEA会自动修正)
- 使用transient(瞬时的)修饰不被序列化的属性,这个属性将不可被序列化
- 静态属性不可被序列化
- 序列化多个对象可以使用ArryaList集合,直接序列化ArryaList集合就可以了,反之,反序列化时则需要返回ArrayList
类型
-
-
properties集合
- 属性集合
- 特点
- 存储属性名和属性值
- 属性名和属性值都是字符串类型
- 没有泛型
- 和流有关
字符编码
- ISO-8859-1:收录除ASCII外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号
- UTF-8:针对Unicode码表的可变长度字符编码
- GB2312:简体中文
- GBK:简体中文、扩充
- BIG5:台湾,繁体中文
字符流
- 字符流的父类(抽象类)
- Reader:字符输入流
- public int read(){}//读取单个字符
- public int read(char[] c){}读取多个字符
- public int read(char[] c ,int off,int len){}
- Writer:字符输出流
- public void write(int n){}//写一个字符
- public void write(String str){}//写一个字符串
- public void write(char[] c){}//写一个字符数组
- Reader:字符输入流
文件字符流
- FileReader:
public int read(char[] c)//从流中读取多个字符,将读到内容存入c数组,返回实际读到的字符数,如果达到文件底部则返回-1
-
FileReader与FileInputStream读取文件的区别
- FileInputStream
- FileReader
-
FileWriter
public void write(String str)//一次写入多个字符,将b数组中所有字符,写入输出流
-
使用字符流复制实现文件复制
字符缓冲流
-
缓冲流:BufferedReader/BufferedWriter
-
高效读写
-
支持输入换行符
-
可一次写一行、读一行
-
BufferedReader
-
BufferedReader
-
-
打印流
- printWriter
- 封装了print()/println()方法,支持写入后换行
- 支持数据原样打印
转换流
-
4\桥转换流:InputStreamReader/OutputStreamWriter
- 可将字节流转换为字符流
- 可试着字符的编码方式
File类
- 代表物理磁盘中的一个文件或者文件夹
- 方法
createNewFile()//创建一个新的文件夹
mkdir()//创建一个新的目录
delete()//删除文件或空目录
exists()//判断File对象所代表的对象是否存在
getAbsolutePath()//获取文件的绝对路径
getName()//取得名字
getParent()//获取文件/目录所在的目录
isDirectory()//是否是目录
isFile()//是否是文件
length()//获得文件的长度
listFiles()//列出目录中的所有内容
renameTo()//修改文件名为
FileFilter接口
- public interface FileFilter
- boolean accept(File pathname)
- 当调用File类中的listFiles()方法时,支持传入FileFilter接口实现类,对获取文件进行过滤,只有满足条件的文件才可出现在listFiles()的返回值中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix