I/O 框架
流的概念
-
概念:内存与存储设备之间传输数据的通道。
-
数据借助流传输
流的分类
-
按方向【重点】:
-
输入流:将 <存储设备> 中的内容读入到 <内存> 中。
-
输出流:将 <内存> 中的内容写入到 <存储设备> 中。
-
-
按单位:
-
字节流:以字节为单位,可以读写所有数据。
-
字符流:以字符为单位,只能读写文本数据。
-
-
按功能:
-
节点流:具有实际传输数据的读写功能。【底层流】
-
过滤流:在节点流的基础之上增强功能。
-
字节流
-
字节流的父类(抽象类):
-
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。
-
对象流
-
对象流:ObjectOutputStream/ObjectInputStream
-
增强了缓冲区功能
-
增强了读写8种基本数据类型和字符串功能
-
增强了读写对象的功能:
-
readObject()从流中读取一个对象,注意读了两个对象会造成: EOF 异常
-
writeObject(Object obj)向流中写入一个对象,要求被写入的类要实现 Serializable 标记接口
-
-
-
使用流传输对象的过程称为序列化:把内存中对象写入流中、反序列化:从流种读取对象。
-
注意要求:
-
(1) 序列化类必须要实现 Serializable 标记接口
-
(2) 序列化类种对象属性要求实现 Serializable 标记接口【属性是一个类的时候】
-
(3) 序列化版本号ID,保证序列化的类和反序列化的类是同一个类
-
(4) 使用 transient(瞬间的,只在内存上临时存在) 关键字,修饰属性,该属性不能被序列化了
-
(5) 静态属性不能序列化
-
(6) 序列化多个对象,可以借助集合实现
-
编码方式
字符编码
-
ISO—8859—1: 收录除 ASCII 外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号
-
UTF—8:针对Unicode码表的可变长度字符编码,万国码
-
GB2312:简体中文
-
GBK:简体中文、扩充
-
BIG5:*、繁体中文
-
当编码方式和解码方式不一致时,会出现乱码。
字符流
-
字符流的父类(抽象类):
-
Reader:字符读取输入流
-
public int read(){}
public int read(char[] c){}
public int read(char[] b, int off, int len){}
-
-
Writer:字符写入输出流
-
public void write(int n){}
public void write(String str){}
public void write(char[] c){}
-
-
文件字符流
-
FileReader:
-
public int read(char[] c)
// 从流中读取多个字符,将读到内容存入 c 数组,返回实际读到的字符数;如果达到文件的尾部,则返回 -1
-
-
FileWriter:
-
public void write(String str)
// 一次写多个字符,将字符串中所有字符,写入输出流
-
字符缓冲流
-
缓冲流:BufferedReader / BufferedWriter
-
高效读写
-
支持输入换行符
-
可一次写一行、读一行
-
打印流
-
PrintWriter:
-
封装了 print() / println() 方法,支持写入后换行
-
支持数据原样打印
-
转换流
-
桥转换流:InputStreamReader / OutputStreamWriter
-
可将字节流转换为字符流。
-
可设置字符的编码方式。
-
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()的返回值中。
Properties
-
Properties:属性集合,继承 HashTable,线程安全的集合
-
特点:
-
存储属性名和属性值,键值对
-
属性名和属性值都是字符串类型
-
没有泛型
-
和流有关
-
总结
-
流的概念:
-
内存与存储设备之间传输数据的通道。
-
-
流的分类:
-
输入流、输出流;字节流、字符流;节点流、过滤流;
-
-
序列化、反序列化:
-
将对象通过流写入到文件,或将对象通过流读取到内存,必须实现 Serializable 接口。
-
-
File对象:
-
代表物理盘符中的一个文件或者文件夹。
-
-