一、概念
1.目前程序中的数据存储在什么地方?
- 数据存储在内存中。
2.这种数据存储的方式有什么问题?
- 内存中的数据存储只是临时存储,再次运行程序数据丢失,不能持久化。
3.持久化:就是把数据从 内存 往 其它存储设备 存储的过程。
4.简单而言:流就是内存与存储设备之间传输数据的通道 管道
5.数据借助流传输类比于水库中的水借助管道传输,以家庭为参照物:
水库中的水------->家庭中:流入
家庭废水---------->下水道:流出
Java中的流也有方向,
二.IO的分流
a. 输入流:将 [其他存储设备]中数据读入到内存中 。->读
b. 输出流:将内存中数据写入到[其他存储设备]中。->写具体看流的分类。
源文件
↓输入流
程序
↓输出流
目标文件
2.按照单位分:
a. 字节流:以字节为传输单位,可以用于操作所有类型的文件。
b. 字符流:以字符为传输单位,可以用于操作文本类型的文件。
↓
文本文件:只要能以记事本打开,并且不丢失原有文件内容的文件。
例如: .txt / .java / .c / .html 等
.class / .ppt /.mp3等文件不是文本文件。
3. 按功能:
a. 节点流:只具有基本的读写功能。
b. 过滤流:在节点流的基础上,增强读写功能。
三、字节流
1. 字节流的父类:(父类为抽象类)
(1) InputStream:字节输入流
- 读操作(read)
- 功能方法:read方法
- 写操作
- 功能方法:write方法
2. 字节节点流
(1)FileOutputStream:文件字节输出流
- FileOutputStream fos=new FileOutputStream(“E:/CoreJava/a.txt”);
- 绝对路径:盘符:/文件夹名/文件名 或是 盘符:\\文件夹名\文件名
- 创建文件字节输出流时,如果指定的文件不存在,则系统会自动创建一个文件,但是文件夹必须提前创建
(2)FileOutputStream fos=new FileOutputStream(“a.txt”);
- 相对路径:默认在当前项目的根目录下查找
- 如果指定的文件不存在,则系统会自动创建一个新的文件
(3)FileOutputStream fos=new FileOutputStream(“file/a.txt”);
↓
常用的创建字节输出流的方式。
- 在当前项目的根目录下的file文件夹中查找是否有a.txt文件,如果不存在,系统默认创建;
但是文件夹必须提前创建。
(4)FileOutputStream fos=new FileOutputStream(“a.txt”);
- 默认覆盖原有文件中的内容。
(5)FileOutputStream fos=new FileOutputStream(“file/a.txt”,true);
- 第一个参数:代表文件的路径
- 第二个参数:代表是否覆盖原有文件中的内容,数据类型为boolean类型,
true:在原有内容上追加新内容
false:写入新内容时,会覆盖文件中原有的内容。
四.常用的方法
1.FileOutputStream继承OutputStream中的方法:
- public void write(int n):将单个字节写入到文件中
五.关闭流
1.将关闭流的语句写在 finally中:不管有没有异常,关闭流必须执行:
2.利用带资源try语句(try-with-resources):
六.File类(java.io包中)
1. File类和IO流的区别。
(1) IO流:对文件的内容进行操作,读取的内容或是将内容写入到文件中。
(2) File类:对文件本身进行操作,例如:删除文件、更改文件名等。
注意:File类本身不具有操作文件的功能,类中的方法提供了操作文件的功能。
2. File类中常用的方法:
(1) String getName() : 获取文件名,带有扩展名。
(2) String getAbsolutePath(): 获取绝对路径。