1 概述
1.1 什么是IO流
IO流是存储和读取数据的解决方案,用于读写文件中的数据(包括本地文件、网络等)
IO流的参照是程序或内存,即使程序在读,程序在写。
1.2 IO的分类
根据流的方向分为:输入流和输出流
- 输入流:把数据从文件等中读取到内存的流
- 输出流:把数据从内存写入到文件等中的流
根据操作文件的类型分为:字节流和字符流 - 字节流:能操作所有的文件类型
- 字符流:只能操作纯文本文件
1.3 IO流的体系
他们都有不同的实现类。
2 字节流
2.1 字节输出流(OutputStream)
是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。
2.2 FileOutputStream
FileOutputStream是字节输出流的一个简单的实现类。
观察它的构造函数,传入的参数有两种,一种是一个参数字符串或者File对象,传递字符串的时候也会将其转化为File对象,另一个参数可选,false是默认值,表示清空当前文件,true则表示不清空当前文件,而是在当前文件的基础上作出变化。
2.3 写数据的流程
- 创建字节输出流对象
- 写数据
- 释放资源
我们在改路径下创建一个test.txt文件,手动输入一些内容:
然后执行下面程序:
package ioStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamDemo1 {
public static void main(String[] args) throws IOException {
// 1. 创建对象
FileOutputStream fos = new FileOutputStream("E:\\javacode\\Acwing\\test.txt");
// 2. 写入数据
fos.write('a');
// 3. 关闭资源
fos.close();
}
}
控制台没有报错,并且查看test.txt:
2.4 需要注意的细节
- 创建对象
- 我们会发现test.txt文件中原先的内容被我们写入的字符给覆盖掉了,其实本质上说是在创建字节输出流对象时对文件先进行了清空。我们可以重写给test.txt文件写入内容,然后把写入数据的代码删掉,并执行程序,程序执行成功之后我们打开test.txt,文件会发现文件是空白的。
- 如果我们需要在接着原文件写入数据,也即在原文件内容之后开始写输入而不是覆盖,那么我们创建对象时就需要额外传递一个参数true(默认值是false),然后写入数据就会发现是append。
- 写入数据
- 写入数据的write方法,它有不同的重载,例如:![[Pasted image 20240327154003.png]]
- 值得注意的时,我们写入的是一个字符,假设我们我们需要写入9,那么传递的参数就应该是
'9'
或者9的ascii码57
。 - 我们需要换行时。换行也是一个字符
\r\n
,因此我们在需要换行时写入改字符即可。
- 关闭资源
- 我们在完成操作之后,我们一定要关闭资源。否则假设我的程序对文件的写操作已经完成,但还在执行其他方法,此时我们对文件进行操作就会出现异常。就好像我们在平常尝试去删除一个已经打开的文件。