1.概述
流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观地进行操作
关于路径 : 绝对路径,从盘符开始的路径,是一个完整的路径
相对路径,相对于项目目录的路径,是一个便捷的路径
2.分类
4个大类
>InputStream(字节输入流)
>OutputStream(字节输出流)
>Reader(字符输入流)
>Writer(字符输出流)
由这4个类派生出来的子类名称都是以其父类名作为子类名后缀
3.文件流
1)FileIuputStream
概述
字节输入流,以字节的方式进行文件中内容的读取操作
压缩包,图片,视频等文件都需要使用字节流传输
常用方法
• public int read() : 从输入流读取一个字节。返回读取的字节值。虽然读取了 一个字节,但 是会自动提升为 int 类型。如果已经到达流末尾,没有数据可读,则返回-1。• public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b 中 。 每次最多读取 b.length 个字节。返回实际读取的字节个数。如果已经 到达流末尾,没有数 据可读,则返回-1。• public int read(byte[] b,int off,int len) :从输入流中读取一些字节 数,并将它们存储到字节 数组 b 中,从 b[off]开始存储,每次最多读取 len 个字节 。 返回实际读取的字节个数。如 果已经到达流末尾,没有数据可读,则返回-1。• public void close() :关闭此输入流并释放与此流相关联的任何系统资源。说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。
2)FileReader
概述
字符输入流,一般适用于纯文本文件,用于解决读取汉字的乱码问题
常用方法
• public int read() : 从输入流读取一个字符。 虽然读取了一个字符,但是会自 动提升为 int 类型。返回该字符的 Unicode 编码值。如果已经到达流末尾了,则返回- 1。• public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf 中 。每次最多读取 cbuf.length 个字符。返回实际读取的字符个数。 如果已经到达流末尾, 没有数据可读,则返回-1。• public int read(char[] cbuf,int off,int len) :从输入流中读取一些字 符,并将它们存储到字符 数组 cbuf 中,从 cbuf[off]开始的位置存储。每次最多读取 len 个字符。返回实际读取的 字符个数。如果已经到达流末尾,没有数据可读,则返 回-1。• public void close() :关闭此流并释放与此流相关联的任何系统资源。注意:当完成流的操作时,必须调用 close()方法,释放系统资源,否 则会造成内存泄漏。
3)FileOutputSream
概述
字节输出流,用于将内存中的数据写出在硬盘中.如果文件不存在,则会自动创建,但是不会创建文件夹,如果文件夹不存在,就会报错
在构造方法中,可以传入两个参数,第一个是文件路径,第二个是写出方式
如果写出方式不传入值或者传入false,则会覆盖原来的内容
如果写出方式传入true,则会在原来的内容之后追加写出新的内容
常用方法
• public void write(int b) :将指定的字节输出流。虽然参数为 int 类型四个字 节,但是只会 保留一个字节的信息写出。• public void write(byte[] b) :将 b.length 字节从指定的字节数组写入此输出流。• public void write(byte[] b, int off, int len) :从指定的字节数组写入 len 字节,从偏移量 off 开始输出到此输出流。• public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。• public void close() :关闭此输出流并释放与此流相关联的任何系统资源。说明:close()方法,当完成流的操作时,必须调用此方法,释放系统资源。
4)FileWriter
概述
字符输出流
常用方法
• public void write(int c) :写出单个字符。• public void write(char[] cbuf) :写出字符数组。• public void write(char[] cbuf, int off, int len) :写出字符数组的某 一部分。off:数组的开始 索引;len:写出的字符个数。• public void write(String str) :写出字符串。• public void write(String str, int off, int len) :写出字符串的某一 部分。off:字符串的开始索 引;len:写出的字符个数。• public void flush() :刷新该流的缓冲。• public void close() :关闭此流。注意:当完成流的操作时,必须调用 close()方法,释放系统资源,否则会造成内存泄漏。
4.缓冲流
概述
用来提高效率,减少物理读取次数
在读取和写入时,会有缓存部分,调用flush()方法可以刷新缓存,将内存数据写入到磁盘中
BufferedReader
try(
//字节输入
FileInputStream fis = new FileInputStream("./Assignment_day20/src/Hello.txt");
//字节输入缓冲
BufferedInputStream bis = new BufferedInputStream(fis);
//字节输入
FileReader fr = new FileReader("./Assignment_day20/src/Hello.txt");
//字节输入缓冲
BufferedReader br = new BufferedReader(fr);){
String temp = null;
while ((temp = br.readLine()) != null)
System.out.println(temp);
}catch (Exception e) {
e.printStackTrace();
}
BufferedWriter
try(
//字节输出
FileOutputStream fos = new FileOutputStream("./Assignment_day20/src/test.txt");
//字节输出缓冲
BufferedOutputStream bos = new BufferedOutputStream(fos);
//字符输出
FileWriter fw = new FileWriter("./Assignment_day20/src/test.txt");
//字符输出缓冲
BufferedWriter bw = new BufferedWriter(fw);
){
bw.write("我是迪奥!");
//换行方法
bw.newLine();
bw.write("jojo");
bw.flush();
}catch (Exception e){
e.printStackTrace();
}
5.转换流
概述
转换流是指将字节流向字符流进行转换,主要有InputStreamReader和OutputStreamWriter
InputStreamReader 将字节流输入流转换为字符输入流
OutputStreamWriter 将字节输出流转换为字符输出流
例子
try(
//字节输入流
FileInputStream fis = new FileInputStream("./Assignment_day20/src/test.txt");
//转换为字符流
InputStreamReader isr = new InputStreamReader(fis);
//字符输入流缓冲
BufferedReader br = new BufferedReader(isr);
){
System.out.println(br.readLine());
}catch (Exception e){
e.printStackTrace();
}