IO流

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值