一、理解
-
简单而言:流就是内存与存储设备之间传输数据的通道、管道。
-
分类:
(1) 按方向(以JVM虚拟机为参照物)【重点】
输入流:将存储设备>中的内容读入到内存>中。
输出流:将内存>中的内容写入到存储设备>中。
(2) 按单位:
字节流:以字节为单位,可以操作所有类型的文件。
字符流:以字符为单位,只能操作文本类型的文件。
(3) 按功能:
节点流:具有基本的读写功能。
过滤流:在节点流的基础上,增加新的功能。
二、字节流
- 父类:字节流的父类(抽象类):
(1) InputStream:字节输入流
对应的操作为读操作
功能方法:read方法
(2) OutputStream:字节输出流
对应的操作为写操作
功能方法:write方法
- 字节节点流
(1) FileOutputStream:字节节点输出流 、文件字节输出流
构造方法:
FileOutputStream fos = new FileOutputStream("D:\\test56/a.txt");
参数:代表操作文件的路径,如果指定的文件夹不存在,则运行报错,
错误信息为:
java.io.FileNotFoundException: D:\test5\a.txt
(系统找不到指定的路径。);如果指定的文件不存在,
系统自动创建
绝对路径:盘符:\\文件夹\\ 文件
相对路径:文件夹/文件,默认在当前的项目中查找对
应的文件夹内容
功能方法:
write(int n):将单个字节写入文件中
close():关闭流
(2) FileInputStream:文件字节输入流
构造方法:
FileInputStream fis = new FileInputStream("file/c.txt");
参数说明:参数代表操作路径,如果指定的文件不存在,则运行报错,
错误信息为:
java.io.FileNotFoundException: file\c.txt (系统找不到指定的文件。)
功能方法:
int read():一次性读取一个字节内容,将读取的内容作为返回值返回,
达到文件尾部时,返回-1
close():关闭流,释放资源
- 字节过滤流
(1) 过滤流:BufferedOutputStream/BufferedInputStream
缓冲流,提高IO效率,减少访问磁盘的次数;
数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。
public class TestFileCopyBuffered {
public static void main(String[] args) throws IOException {
// 1. 创建文件字节输入流+输出流对象
// (1) 创建文件节点流对象
FileInputStream fis = new FileInputStream("D:\\test\\ph.mp4");
// (2) 创建过滤流
BufferedInputStream bis = new BufferedInputStream(fis);
// 写文件
FileOutputStream fos = new FileOutputStream("file/ph_copy.mp4");
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 2. 边读边写
while(true){
int n=bis.read();
if(n==-1) break;
bos.write(n);
}
// 3. 关闭流。释放资源
bis.close();
bos.close();
}
}
三 、 字 符 流
- 字 符 流 的 父 类 ( 抽 象 类 ):
**R e a d e r:**字 符 输 入 流
对 应 的 操 作 为 读 操 作
功 能 方 法:r e a d 方 法
**W r i t e r :**字 符 输 出 流
对 应 的 操 作 为 写 操 作
功 能 方 法:w r i t e 方 法
- 文件字符流
(1) FileWriter文件字符输出流,继承Writer中的方法:
public void write(int n):将单个字符写入到文件中
(2) FileReader文件字符输入流,继承Reader中的方法:
public int read():一次读取一个字符的内容
- 字符过滤流
(1) BufferedReader:
功能方法,readLine():一次性读取一行内容,返回内容为String,
读取达到尾部,返回-1
(2) PrintWriter
println(参数);
- 桥转换流
InputStreamReader/OutputStreamWriter:桥转换流;设置 编解码格式
四、File类
- IO流:对文件中的内容进行操作。 File类:对文件自身进行操作,例如:删除文件,
文件重新命名等。
- 操作:
public class TestFile {
public static void main(String[] args) throws IOException {
File file = new File("file/hh.txt");
/*System.out.println(file.exists());
file.createNewFile();*/
if(file.exists()){
System.out.println("文件存在,则直接使用...");
FileInputStream fis = new FileInputStream(file);
}else{
System.out.println("文件不存在,创建新的文件....");
file.createNewFile();
}
}
}