Java中的IO流之文件输入输出流
1、文件流介绍
文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流。文件流位于java.io包下。
输入输出流分别是FileInputSteam和FileOutputStream流。文件流的作用就是专门用来读写文件的。
文件流是基于流式读写的,而流式读写是一种顺序读写的形式,只能依次从文件开始,顺序向下读写文件,不能回退。
文件流属于低级流,但是可以串联高级流,完成一些复杂数据的读写操作。
2、文件输入流FileInputStream
<1>文件输入流常见构造方法
构造方法一:
FileInputStream(File file)
构造方法二:
FileInputStream(String name)

注:创建文件输入流对象时,如果对应的文件不存在,则会抛出文件找不到异常。
<2>文件输入流读取文件的方法
文件输入流读取文件的常用三个方法如下:
int read():一次只读取一个字节。
int read(byte[] b):一次读取一个字节数组的字节。
int read(byte[] b, int offset, int len):
一次读取len个字节,然后放入字节数组的offset下标开始处。

<3>使用文件输入流读取文件内容
这里以read(byte[] b)方法为例子。

测试结果:

注:使用字节数组读取的优点是可以提高读取效率。
3、文件输出流FileOutputStream
<1>文件输出流常见构造方法
文件输出流有两类写出方式,一类是覆盖写操作,另一类是追加写操作。
覆盖写:
FileOutputStream(File file)
FileOutputStream(String name)
追加写:
FileOutputStream(File file, boolean append)
FileOutputStream(String name, boolean append)
当文件输出流构造方法第二个参数为true时,则表示开启追加写方式。

<2>文件输出流写出文件的方法
和文件输入流一样,也有三个写出方法。分别如下:
void write():一次写出一个字节。
void write(byte[] b):一次写出一个字节数组。
void write(byte[] b, int offset, int len):把字节数组中从下标offset开始的字节写出文件,并且写出len个长度。

<3>文件输出流覆盖写操作
第一次写入数据:

结果如下:

第二次写入数据:

结果如下:

注:从两次写入数据的结果中可以看出,FileOutputStream的覆盖写操作,是将之前的数据清空后,然后在重新开始写入数据。
<4>文件输出流追加写操作
第一次写入数据:

结果如下:

第二次写入数据:

结果如下:

4、FOS类和RAF类覆盖方式不同之处
这里说明一下:FOS指代文件输出流FileOutputStream,而RAF则是指代RandomAccessFile类。
<1>RAF类的覆盖方式是,从文件开头开始,依次覆盖相应字节数据。
<2>FOS类的覆盖方式是,先把文件中的原有内容清空,然后在把新的内容写入文件。
综上,Java中IO流之文件输入输出流介绍完了。
这是我的第28篇文章,谢谢大家阅读。