一、File类
1.构造方法 2.常用方法
二、继承结构图
三、字节流
1.字节输入流 2.字节输出流
四、字符流
1.字符输入流 2.字符输出流 3.字符输入流plus:InputStreamReader
五、扩展:其他流
1.缓冲流 2.转换流 3.数据流 3.对象流
一、File类
File类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。
1.构造方法
(1)由一个完整的路径
File f1 = new File("D:\\ATC\\JAVA20201009\\study\\day20");
(2)由父路径+子路径
File f2 = new File("D:\\", "ATC\\JAVA20201009\\study\\day20");
(3)File对象+子文件(夹)名
File f3 = new File("D:\\ATC\\JAVA20201009\\study\\");
File f4 = new File(f3, "day20/a.txt");
路径的末端可以是文件夹或目录或文件名。
2.常用方法
返回值类型 | 方法 | 说明 |
---|---|---|
String | .getName() | 获取文件(夹)名 |
String | .getPath() | 获取文件(夹)路径 |
boolean | .exists() | 文件(夹)是否存在 |
boolean | .isFile() | 是否是一个文件 |
boolean | .isDirectory() | 是否是一个目录(文件夹) |
boolean | .createNewFile() | 创建一个文件 |
boolean | .mkdir() | 创建一个具体的文件夹 |
boolean | .mkdirs() | 创建多级文件夹 |
boolean | .delete() | 删除某个文件夹 |
String[] | .list() | 返回某个文件夹下的所有文件(夹)名 |
File[] | .listFiles() | 获取某个文件夹下所有的文件(夹) |
二、继承结构图
三、字节流
1.字节输入流
(1)构造方法
new FileInputStream(String 文件路径/File文件对象);
(2)使用步骤
- 使用构造方法创建字节输入流对象
- 调用 .read(byte[] b) 方法,将数据转化为字节存入数组
- 调用 .close()方法 关闭流对象
read方法还有如下两种用法:
.read()
返回一个字节,表示读取一个字节。
.read(byte[] b,int off,int len)
b为要存入的数组,off为存入数组的下标起点,len为读取长度,返回实际存入的字节数。
(3)扩展方法
.available() 返回字节输入流中可读取的字节个数
2.字节输出流
(1)构造方法
new FileOutputStream(String/Flie,boolean);
后面布尔参数可加可不加,若为true,表示往里追加而非覆盖。
(2)使用步骤
- 使用构造方法创建字节输出流对象
- 调用 .write(byte[] b) 方法,将字节数组写入目标文件中
- 调用 .close()方法 关闭流对象
write方法还有如下两种用法:
.write(int b)
写入一个字节数据b。
.write(byte[] b,int off,int len)
b为要输出的数组,off为输出数组的下标起点,len为输出长度。
四、字符流
1.字符输入流
(1)构造方法
new FileReader(String/File);
(2)使用步骤
- 构建流对象
- 调用 .read(char[] c) 方法,将数据转化为字符存入数组
- 调用 .close()方法 关闭流对象
read方法还有如下两种用法:
.read()
表示读取一个字符,返回一个字符,如果没有读到,返回-1。
.read(char[] c,int off,int len)
b为要存入的数组,off为存入数组的下标起点,len为读取长度,返回实际存入的字节数。
2.字符输出流
(1)构造方法
new FileWriter(String/File,boolean);
后面布尔参数可加可不加,若为true,表示往里追加而非覆盖。
(2)使用步骤
- 构建流对象
- 调用 .write(char[] c) 方法,将字符数组写入目标文件中
- 调用 .close()方法 关闭流对象
write方法还有如下四种用法:
.write(int c)
写入一个字符数据c。
.write(String str)
写入一个字符串。
.write(String str,int off,int len)
str为要输出的字符串,off为输出字符串的下标起点,len为输出长度。
.write(char[] c,int off,int len)
c为要输出的字符数组,off为输出字符数组的下标起点,len为输出长度。
3.字符输入流plus:InputStreamReader
InputStreamReader 与普通字节输入流 FlieReader 的区别在于它可以指定编码格式,从而解决普通字节输入流可能会出现的乱码问题。
(1)构造方法
new InputStreamReader(字节输入流对象, charsetName);
charsetName为一段表示编码格式的字符串
(2)使用步骤
使用步骤和方法与字符输入流相同。
五、扩展:其他流
1.缓冲流
由于其带有缓冲区的特性,在进行特定大小内的数据操作时效率会更高。
- BufferedInputStream
- BufferedOutputStream
- BufferedReader
- BufferedWriter
用法:
new BufferedOutputStream(字节输出流对象,int a);
构造方法的第二个参数可以设置缓冲区的大小。
2.转换流
一般用来将字节输入/输出流转换为字符输入/输出流,写成链式。
- InputStreamReader
- OutputStreamWriter
用法:
// 链式写法
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter((new FileOutputStream(""))));
3.数据流
性能提升有限,较少使用。
- DataInputStream
- DataOutputStream
构造方法:
new DataInputStream(new FileInputStream(" "));
4.对象流
可以将对象序列化后保存在文件中,或者从文件中读取对象数据并反序列化为对象。
用法:
//创建对象输出流
ObjectOutputStream oos = new ObjectOutputStream(字节输出流对象);
//创建要保存的对象并保存--序列化
oos.writeObject(对象);
oos.close();
// 创建对象输入流
ObjectInputStream ois = new ObjectInputStream(字节输入流对象);
//读取文件中的对象 -- 反序列化
Person person = (Person)ois.readObject();