IO流的基础概念
1.如何理解IO
1.输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是
“读”,读取外部数据)。
2.输出(Output)指的是:程序输出数据给外部系统从而可以操作外部
系统(核心含义是“写”,将数据写出到外部系统)。
3.java.io包为我们提供了相关的API,实现了对所有外部系统的输入输
出操作,这就是IO的基础概念
2.数据源
数据源分为:源设备、目标设备。
1 源设备:为程序提供数据,一般对应输入流。
2 目标设备:程序数据的目的地,一般对应输出流。
3.流的概念
1.流是一个抽象、动态的概念,是一连串连续动态的数据集合。
对于输入流而言,数据源就像水箱,流(stream)就像水管中流动着
的水流,程序就是我们最终的用户。我们通过流(A Stream)将数
据源(Source)中的数据(information)输送到程序(Program)中。
2.对于输出流而言,目标数据源就是目的地(dest),我们通过流(A
Stream)将程序(Program)中的数据(information)输送到目
的数据源(dest)中。
4.JAVA中按照IO流进行不同的工作进行分类
1.按流的方向分类:
输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)
输出流:数据流向是程序到目的地(以OutPutStream、Writer结尾的流)
2.按处理的数据单元分类:
字节流:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,如FileInputStream、
FileOutputStream
字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,如
FileReader、FileWriter
3.按处理对象不同分类
节点流:可以直接从数据源或目的地读写数据,如FileInputStream、FileReader、
DataInputStream等。
处理流:不直接连接到数据源或目的地,是”处理流的流”。通过对其他流的处理提高程序的性能,
如BufferedInputStream、BufferedReader等。处理流也叫包装流
5.Java中IO流类的体系
1.InputStream
此抽象类是表示字节输入流的所有类的父类。InputSteam是一个抽
象类,它不可以实例化。 数据的读取需要由它的子类来实现。根据
节点的不同,它派生了不同的节点流子类 。
2.OutputStream
此抽象类是表示字节输出流的所有类的父类。输出流接收输出字节
并将这些字节发送到某个目的地。
3.Reader
Reader用于读取的字符流抽象类,数据单位为字符。
4.Writer
Writer用于输出的字符流抽象类,数据单位为字符。
6.IO流的基础写法示范
使用最新的try-with-resource进行示范
//使用try-with-resource的方式,会帮我们自动关闭流
public class Test {
public static void main(String[] args) {
try(
FileInputStream fis = newFileInputStream("d:/a.txt");//在try中打开资源,不需要在代码中添加
){
StringBuilder sb = new StringBuilder();//创建字符对象
int temp=0;
while((temp = fis.read()) != -1){//判读返回的值是否为空
sb.append((char) temp);//进行字符串拼接
}
System.out.println(sb);//输出
}catch(Exception e){
e.printStackTrace();
}
}
7.四个基本抽象类的常用实现类
1.InputStream的实现类:
1.FileInputStream:节点流:以字节为单位直接操作“文件”,进行输入
2.BufferedInputStream:处理流:将InputStream对象进行包装,增加缓
存功能,提高读写效率
3.DataInputStream:处理流:以字节为单位直接操作“基本数据类型与字符串类型,进行输入
4.ObjectInputStream:处理流:以字节为单位直接操作“对象”进行输入
2.OutputStream的实现类:
1.FileOutputStream:节点流:以字节为单位直接操作“文件”,进行输出
2.BufferedOutputStream:处理流:OutputStream对象进行包装,增加缓
存功能,提高读写效率
3.DataOutputStream:处理流:以字节为单位直接操作“基本数据类型与字符串类型,进行输出
4.ObjectOutputStream:处理流:以字节为单位直接操作“对象”进行输出
3.Reader的实现类
1.FileReader:节点流:以字符为单位直接操作“文本文件”(注意:只能读写文
本文件)进行输入
2.BufferedReader:处理流:将Reader对象进行包装,增加缓存功能,提高
读写效率
3.InputStreamReader:处理流:将字节流对象转化成字符流对象
4.Writer的实现类
1.FileWriter:节点流:以字符为单位直接操作“文本文件”(注意:只能读写文
本文件)进行输出
2.BufferedWriter:处理流:将Writer对象进行包装,增加缓存功能,提高
读写效率
3.OutputStreamWriter:处理流:将字符流对象转化成字节流对象
PrintWriter:自身携带缓存功能的字符输出流
8.Apache commons-io工具包的使用
1.commons-io工具包
Apache的commons-io工具包中提供了IOUtils/FileUtils类,为我们
提供了更加简单、功能更加强大的文件操作和IO流操作功能。
下载地址
https://commons.apache.org/proper/commons-io/download_i
o.cgi