1 什么是IO流
I
input 输入流
read 读取数据
O
output 输出流
write 写入数据
一般情况下都是按照当前程序使用的内存为参照物来考虑数据的走向问题。
- 从内存中保存数据到硬盘 output
- 从硬盘中读取数据到内存 input
文件操作为例
1GB完整的文件拷贝过程,要远远高于1GB散文件的拷贝过程。
1. 打开文件,关闭文件消耗资源较少
2. 1GB散文件就需要不断的打开,关闭资源
操作时间的消耗和打开文件,关闭文件或者说打开硬盘,关闭硬盘有直接关系
看视频,缓冲
使用缓冲可以让用户体验提高,相对来说较为平和的观看体验。
网页第一次访问时,加载时间较慢,第二次打开,速度很快
IO流基类
InputStream
输入流基类 read
OutputStream
输出流基类 write
2 IO流分类
- 流向分类 输入输出
- 文件操作处理单元分类 字节流和字符流
- FileInputStream 文件操作输入字节流
- FileOutputStream 文件操作输出字节流
FileReader 文件操作输入字符流
FileWriter 文件操作输出字符流
3 文件操作字节流
3.1 文件操作输入字节流
FileInputStream 文件操作输入字节流
Constructor 构造方法
FileInputStream(File file);
这里是根据提供的File类对象创建对应的文件操作输入字节流。
FileInputStream(String pathName);
这里是根据提供的String类型文件路径,创建对应的文件操作输入字节流。
都会抛出异常:
FileNotFoundException 文件未找到异常。
Method 成员方法
int read();
从文件中读取一个字节数据返回到方法外。
虽然返回值是一个int类型,但是在整个int类型当中存储的数据是一个byte类型,有
且只有低8位数据有效
int read(byte[] buf);
读取文件的内容是存储在byte类型数组中,返回值是读取到的字节个数
int read(byte[] buf, int offset, int count);
读取文件的内容是存储在byte类型数组中,要求从byte数组offset位置开始,到
count长度结束,返回值是读取到的字节个数
以上三个方法如果读取到文件末尾,返回值都是 -1 EOF End Of File
而且以上方法都要异常抛出
IOException IO异常
3.2 文件操作输出字节流
FileOutputStream 文件操作输出字节流
Constructor 构造方法
FileOutputStream(File file);
根据File类对象创建对应的文件输出字节流对象
FileOutputStream(String pathName);
根据String类型文件路径创建对应的文件输出字节流对象
以上两个构造方法,创建的FileOutputStream是删除写/清空写操作,会将原文件中的内容全部删除之后,写入数据。
FileOutputStream(File file, boolean append);
根据File类对象创建对应的文件输出字节流对象。创建对象时给予append参数为
true,表示追加写。
FileOutputStream(String pathName, boolean append);
根据String类型文件路径创建对应的文件输出字节流对象,创建对象时给予append参
数为true,表示追加写。
FileOutputStream构造方法是拥有创建文件的内容,如果文件存在,不创建,文件不存在且路径正确,创建对应文件。否则抛出异常FileNotFoundException
Method 成员方法
oid write(int b);
写入一个字节数据到当前文件中,参数是int类型,但是有且只会操作对应的低八位数
据
void write(byte[] buf);
写入字节数组中的内容到文件中
void write(byte[] buf, int offset, int length);
写入字节数组中的内容到文件中,从指定的offset开始,到指定长度length
以上方法会抛出异常:IOException
4 文件操作字符流
4.1 字符流特征
字符流 = 字节流 + 解码过程
字节组合操作 ==> 对应当前环境编码集的一个字符
如果字符找不到,该数据无效,需要被删除。
如果是字符内容操作,效率还可以!!!
如果是非字符操作,凶多吉少!!!
字符流操作文件
个人建议,该文件可以使用notepad 记事本打开无乱码,可以使用字符流操作。
视频文件,图片文件,特定格式的文件,都无法使用字符操作。
4.2 文件操作输入字符流
FileReader 文件操作输入字符流
Constructor 构造方法
FileReader(File file)
根据File类对象创建对应的FileReader字符流输入对象
FileReader(String pathName)
根据String类型文件路径创建对应的FileReader字符流输入对象
如果文件不存在,抛出异常FileNotFoundException
Method 成员方法
int read();
读取文件中的一个字符数据,通过返回值返回,返回值类型是int类型,但是在int类
型中有且只有低16位数据有效
int read(char[] arr);
读取文件中的数据保存到字符数组中,返回值类型是读取到的字符个数
int read(char[] arr, int off, int len);
读取文件中的数据保存到字符数组中,要求从数组中下标offset开始,到len结束,返
回值类型是读取到的字符个数
以上方法,如果读取到文件默认,返回值为-1 EOF End Of File
如果读取操作工作中,出现问题,抛出异常IOException