IO
File类
概念
- 代表物理盘符中一个文件或文件夹
主要方法
createNewFile()//创建一个新文件
mkdir()//创建一个新目录
delete()//删除文件或空目录
exists()//判断File对象所对象所代表的对象是否存在
getAbsolutePath()//获取文件的绝对路径
getName()//取得名字
getParent()//获取文件/目录所在的目录
isDirectory()//是否是目录
isFile()//是否是文件
length()//获得文件的长度
listFiles()//列出目录中的所有内容
renameTo()//修改文件名为
FileFilter接口和FileNameFiler接口
- 当作为list()或listFiles()方法的参数时,可以对文件进行过滤
流
概念
- 内存与存储设备传输数据的通道
分类
-
按方向
-
输出流
- 内存->存储设备
-
输入流
- 存储设备->内存
-
-
按单位
- 字节流
- 字符流
-
按功能
-
节点流
- 具有实际传输数据的读写功能
-
过滤流
- 在节点流的基础之上增强功能
-
体系结构图
字节流
主要方法
-
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){}
主要实现类
-
FileOutputStream/FileInputStream
-
主要方法
-
public void write(byte[] b)
- 一次写多个字节,将b数组中所有字节,写入输出流
-
public int read(byte[] b)
- 从流中读取多个字节,将读到内容存入b数组,返回实际 读到的字节数;如果达到文件的尾部,则返回-1
-
-
-
BufferedOutputStream/BufferedInputStream
-
特点
- 提高IO效率,减少刚问磁盘的次数
- 数据存储在缓冲区,flush()方法将缓冲区的内容写到文件,也可以用close()方法
-
主要方法
- public void flush()
-
-
ObjectOuputStream/ObjectInputStream
-
特点
-
增强了缓冲区功能
-
增强了读写8种基本数据类型和字符串功能
-
增强了读写对象的功能
- readObject() 从流中读取一个对象
- writeObject(Object obj) 向流中写入一个对象
-
-
对象序列化
-
要求
- 对象必须实现Serializable(自动化接口)或Externalizable(半自动化接口)
- 序列化的类要添加一个私有的long类型静态常量:serialVersionUID,保证序列化的类反序列化的类是同一个类
-
注意
- 加transient关键字的属性不参与序列化,但实现Externalizable接口可以手动让它参与序列化
- 静态属性不参与序列化
-
读取到文件到文件尾部的标志:java.io.EOFException
-
创建对象的方法
-
new 调用构造方法
-
反射 调用构造方法
-
反序列化 Serializable(自动不会调用构造方法) Externalizable(手动会调用构造方法)
-
克隆 不会调用构造方法
-
实现方式
- 类实现Cloneable接口
- 重写Object类的clone()方法
-
特点
-
浅复制
- 只会将类克隆一遍,不会将类中的引用成员克隆,只会克隆引用成员的一份地址
-
-
要实现深复制(类的引用成员还会创建一个对象进行克隆),就必须引用成员的类也实现克隆,并在类中的clone()方法中调用引用类的克隆方法并赋值给应用成员
-
-
-
-
-
PrintStream
-
封装了print() / println()方法,支持写入后换行
-
System.out成员就是这个类型,默认输出到控制台
- System.out是InputStream类型,可以将它包装成InputStreamRedaer转换流,再包装成BufferedReader类实现读取一整行(Scanner底层原理)
-
可以将其重定向标准输出流,输出到文件中
-
字符编码
ISO-8859-1
- 收入除ASCII以外,还包括西欧、希腊语、泰语、阿拉伯语、西伯来语对应的字符
UTF-8
- 针对Unicode可变长度字符编码
GB2312
- 简体中文
GBK
- 简体中文,扩充
BiG5
- 繁体中文,台湾
try(类名 引用 = new 类名()){
}结构
会自动关闭对象,不过该类必须实现AutoCloseable接口
字符流
主要方法
-
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){}
特点
- 一般都带有缓冲区,需要flush()或关闭
实现类
-
FileReader/FileWriter
- public void write(String str) //一次写多个字符,将b数组中所有字符,写入输出流
- public int read(char[] c) //从流中读取多个字符,将读到内容存入c数组,返回实际读到 的字符数;如果达到文件的尾部,则返回-1
- 写要使用flush()方法刷新缓冲区,close()也会默认刷新缓冲区。
-
BufferedReader/BufferedWriter
-
特点
-
可支持输入换行符
- void newLine()
-
可一次写一行读一行
- void readLine()
-
-
-
InputStreamReader/OutputStreamWriter
-
特点
- 是字节流通向字符流的桥梁(InputStreamReader),也是字符流通向字节流的桥梁(OutputStreamWriter)
-
主要通过构造函数设置字节流和编码集
-
-
PrintWriter
- 封装了print() / println()方法,支持写入后换行
RandomAccessFile类
seek(long n)
- 指针跳到n的位置
skipBytes(int n)
- 指针跳过n个字节
mode
- rw
- r
特点
- 既可以读文件,也可以写文件
- 可以跳到文件的任意位置读文件
作用
- 快速定位,并发读写
- 方便获取二进制文件
Properties
list()方法
- 参数为打印流(PrintStream/PrintWriter),遍历输出到流
store()方法
- 参数为字节输出流或字符输出流
load()方法
- 参数为字节输入流或字符输入流