javaI/O流
定义
I/O流(Input/Output)流,即输入/输出流,是java中实现输入/输出的基础,他可以方便实现数据的输入/输出操作。
分类
根据不同的方式进行分类
根据操作数据单位不同可以分为字节流和字符流
字节流
定义
在计算机中,无论是文本、图片、音频还是视频,所有文件都是以二进制(字节)形式存在的,I/O流中针对字节的输入/输出提供了一系列的流,统称为字节流。
简述
InputStream被看成一个输入管道,OutputStream被看成一个输出管道,数据通过InputStream从源设备输入到程序,通过OutputStream从程序输出到目标设备,从而实现数据的传输。
分类
InputStream
OutputStream
缓冲区
定义
在文件拷贝过程中,通过以字节形式逐个拷贝,效率很低,因此可以定义一个字节数组缓冲区,在拷贝文件时,就可以一次性读取多个字节的数据。
使用方法
- 创建输入输出流,关联数据源和数据目的
FileInputStream fis = new FileInputStream("D:\\a.flv");
FileOutputStream fos = new FileOutputStream("D:\\b.flv");
- 创建字节缓冲区
byte[] bys = new byte[1024];
- 在读取的过程中,将数据写出到数据目的
int len;
while((len = fis.read(bys))!=-1){
//3.写出的时候,从数组容器中取出,0-len(有效字节个数)
fos.write(bys,0,len);
}
- 关闭资源
fis.close();
fos.close();
- 使用read()
read()按字节读取,读到-1,结束读取
字节缓冲流
定义
IO中还提供了两个字节缓冲流来提高文件拷贝效率:BufferedInputStream 和 BufferedOutputStream。
特点
由于两个流对象中,内置了字节(数组) ,从而提高IO流的读写效率。
使用
-
创建字节缓冲,输入输出流
-
读写操作
-
关闭资源
过程
数据源(源设备)——>FileInputStream(字节流)——>BufferedInputStream(字节缓冲流)——>JAVA(应用程序)——>BufferedOutputStream(字节缓冲流)——>FileOutputStream(字节流)——>数据目的(目标设备)
字符流
定义
JDK还提供了用于实现字符操作的字符流,同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader 和 Writer。
作用
操作纯文本文件时,可以解决乱码问题
注意
字符流只能操作纯文本文件
如果字符输出流没有调用close方法、flush方法的话,数据将不会写出到文件中
原理
字符流底层实际上是通过(字节流+编码表)的形式进行读取的,在读取之后,会根据平台默认码表决定一次读取多少个字节,并在内存中转换为字符。 GBK ——> 一个中文占2个字节 UTF-8 ——> 一个中文占3个字节
流的主要方法
-
flush方法是将数据刷出到文件中去,刷出后可以继续调用write方法写出
-
close方法的主要功能是关闭流释放资源,同时也具有刷出数据的效果
-
close方法调用结束后,不能再调用write方法写出数据
readLine()按行读取,读到null,结束读取
字符缓冲流
BufferedInputStream
BufferedOutputStream
根据流传输方向不同可以分为输入流和输出流
根据功能不同可以分为节点流和处理流
结构
- InputStream
- OutputStream
- Reader
- Writer
转换流(字节流转换字符流)
作用
转换流可以按照指定的编码表读写数据
说明
提供了两个类用于实现将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter
(1)InputStreamReader是Reader的子类,它可以将一个字节输入流转换成字符输入流,方便直接读取字符。
(2)OutputStreamWriter是Writer的子类,它可以将一个字节输出流转换成字符输出流,方便直接写入字符。
使用方法
InputStreamReader isr = new InputStreamReader(new FileInputStream(“b.txt”),“utf-8”);
File类
说明
File类用于封装一个路径,这个路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径。封装的路径可以指向一个文件,也可以指向一个目录,在File类中提供了针对这些文件或目录的一些常规操作。
构造方法
- File(String pathname) 通过指定的一个字符串类型的文件路径来创建一个新的File对象
- File(String parent,String child) 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
- File(File parent,String child) 根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象