IO流的学习(二)---IO流的整体框架和使用
IO流的学习(二)—IO流的整体框架和使用
流的操作
I/O也就是input/output的缩写也就是处理设备之间数据的传输,且传输的过程称为“流”;并且java中提供了标准的方法取读、写数据,且输入输出也就是对于程序(即内存)和外部存储结构或者网络链接来说的
- input:也就是输入,读取外部的数据到内存之中
- output:也就是输出,将内存中的数据输出到磁盘或者光盘等存储设备之中
关于流的分类
- 按照处理数据类型分:字符流(char)和字节流(byte)
- 按照流向来分:输入流和输出流
- 按照流的角色分:节点流和处理流
关于流的图示说明
如下图所示节点流也就是链接两个传输节点最基本的流;而处理流则是加包在节点流外面的流,且处理流可以不止加有一个。可以多重叠加
流的体系结构
- 其中InputStream\OutputStream是对于字节流,Reader\Writer是对于字符流来说的他们是抽象的基类是通过其子类来实现功能
- 节点流中举出文件流:在类前加一个File,很好理解,也就是访问文件的流类型,它属于节点流通过直接引用文件名来创建对象;
- 处理流中举出缓冲流:在类前面加一个Buffered也就是提供一个缓冲区来提升文件的读写速度;注意其需要通过节点流的对象来创建其对象,并且关闭流的时候也是从外层到内层来关闭流;
节点流的使用
节点流的使用步骤
四个基本步骤
- 创建File类的对象来指出读、写的文件
- 通过File类的对象来创建读、写的方法对象
- 利用读写的方法来进行读写操作
- 关闭流(因为java中没有设置自动关闭流的功能所以我们需要自己去调用它的close方法)
操作过程中需要注意的地方
-
需要使用try\catch\finally的结构保证在能正确catch异常的同时也保证**close()**操作的正常进行
-
FileReader
- read()方法是返回一个字符读到末尾则返回-1数字,可以通过空参构造来以单个char来接收也可以创建char[]数组来接收 所读取到的数据
- 它不能读取不存在的文件
-
FileWriter
- write()方法是输出操作,它所指定的文件可以不存在。如果不存在那么它就会自动创建该文件
- 如果它所指定的文件存在则看它使用的对象构造器
- 如果使用的构造器为new FileWrite(filePath,false);/new FileWrite(filePath);则是用输入的内容覆盖原文件内容
- 如果使用的构造器为new FileWrite(filePath,true);则是在原文件内容后追加该输入的内容
-
而FileInputStream和FileOutputStream与前者的差别也只是传输的时候为字节类型的数据使用read()方法时需要用byte或者byte[]来接受所读入的数据
简单的FileReader和FileWriter的使用
/*
* 将xsxIO1109的hello.txt的文件内容读入程序中,并且输出到控制台
*
* 1. 关于read()的理解:返回读入的一个字符。如果达到文件的末尾,则返回-1;
* 2.异常的处理:为了保证资源可以执行close操作,需要使用try/catch/finally来操作
* 3.不能读取不存在的文件
*/
public void testFileReader(){
FileReader fr=null;
//用try-catch-finally的结构保证读取流能正常关闭
try {
//1.实例化File类的对象,指名操作的文件
File file=new File("C:\\Users\\no\\Desktop\\hello.txt");//这里使用的是绝对路径
//2.提供具体的流
fr=new FileReader(file);
//3.数据的读入
int data;
while((data=fr.read())!=-1) {
System.out.print((char)data);
}
} catch (IOException e) {
// TODO: handle exception
}finally {
//4.流的关闭操作