一、IO流概述
1.概述
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的类都在IO包中
2.分类
①按流向分类
- 输入流
- 输出流
②操作类型
- 字节流:可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
- 字符流:只能操作纯字符数据,比较方便。
3.常用父类
①字节流
- InputStream
- OutputStream
②字符流
- Reader
- Writer
4.IO流体系结构图
5.程序书写
- 使用前,导入IO包中的类
- 使用时,进行IO异常处理
- 使用后,释放资源(关闭连接的通道)
二、FileInputStream
1.构造函数
FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个FileInputStream
,该文件通过文件系统中的File
对象file
指定。
FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个FileInputStream
,该文件通过文件系统中的路径名name
指定。
2.read()方法
int
read()
从此输入流中读取一个数据字节。
注:返回值为int型,会抛出IOException异常
FileInputStream fis = new FileInputStream("xxx.txt"); //创建流对象
int b;
while((b = fis.read()) != -1) {
System.out.println(b);
}
fis.close();
对于返回类型int:
通常下是下一个数据字节;如果已到达文件末尾,则返回 -1
。
read()方法读取的是一个字节,为什么返回是int,而不是byte?
答:
因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111
由于1111111是byte类型的-1,程序遇到-1就会停止,后面的数据就无法读取,所以用int类型接收,如果11111111会在其前面补上24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
三、FileOutputStream
1.构造方法
FileOutputStream(File file)
创建一个向指定File
对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(File file, boolean append)
创建一个向指定File
对象表示的文件中写入数据的文件输出流。
FileOutputStream(String name, boolean append)
创建一个向具有指定name
的文件中写入数据的输出文件流。
如果文件不存在,则自动创建。
如果文件存在,前两者会重写文件中的内容;后两者可以通过设置append为true,进行追加方式写
FileOutputStream fos = new FileOutputStream("bbb.txt");
FileOutputStream fos = new FileOutputStream("bbb.txt",true);
2.write()方法
void
write(int b)
将指定字节写入此文件输出流。
FileOutputStream fos = new FileOutputStream("yyy.txt"); //创建字节输出流对象,如果没有就自动创建一个
fos.write(97); //虽然写出的是一个int数,但是到文件上的是一个字节,会自动去除前三个8位
fos.write(98);
fos.write(99);
fos.write(100);
fos.close();