(一)什么是IO?
IO是InputOutput的缩写,表示的是输入输出流。
(1) I :Input,表示的是将数据从硬盘的文件中输入到内存,称为Read操作。(2) O :Output,表示的是将数据从内存输出到硬盘的文件,也称为write操作
Java程序中,对于数据的操作是以"流“的方式进行的。
说明:
① 通过IO流来完成硬盘上数据的读与写(作用)
② java.io包下提供了各种”流“类和接口,用以获取不同种类的数据,并通过标准的方 法输入或输出数据
(二)流的分类
(1)根据操作数的基本单位:字节流(8位)、字符流(16位)
(2)根据数据的流向: 输入流、输出流
(3)根据流的对象: 节点流、处理流
①如何区分输入和输出流的流向呢??
站在以内存为核心的角度上:
若是读取数据,就是 从 磁盘文件---->内存
若是写入数据,就是 从 内存 ------>磁盘文件
②字节流 VS 字节流??
字节流在操作时本身不会用到缓冲区(内存),是文件本身直接进行操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
体系结构如下:
表格如下:
抽象基类 | 节点流 | 缓冲流 |
InputStream | FileInputStream | BufferedInputStream |
OutputStream | FileOutputStream | BufferedOutputStream |
Writer | FileWriter | BufferedWriter |
Reader | FileReader | BufferedReader |
说明:
(1)FileInputStream和FileOutputStream是用来处理字节的
(2)FileWriter和FileReader是用来处理字符的
使用场景
字符流:文本文件 <.txt .java .c .cpp等>
字节流:非文本文件 <.jpg .mp3 .mp4 .avi .doc .ppt等>
(三)使用介绍
I. <FileWriter>&<FileReader>
(1)基本介绍
FileWriter指的是从内存向文件写入字符数据。
FileReader指的是从文件向内存读出字符数据。
(2)使用步骤
①实例化File类的对象(指明要读出或写入的文件路径)
②创建一个具体的流对象(操作具体数据)
③通过循环进行数据的读入或读出
④流的关闭(必要操作)
(3)实例代码
FileReader测试
@Test
public void testFileReader() {
FileReader tr= null;
try {
//实例化File类的对象,指明路径
File file = new File("hello1.txt");
//创建具体的流对象,用来进行操作数据
tr = new FileReader(file);
//读写数据
int data;
while((data=tr.read())!=-1){
System.out.print((char)data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭对应的流
try {
if(tr!=null) {
//条件判断是为了防止出现空指针异常
tr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
说明:
①通过read读入的是对应字符的ASCILL码值
②异常处理使用的是结构: try---catch---finally(流的关闭)
如果使用throws方法,可能造成内存泄漏
③流的关闭
数据库连接、输入输出流、Socket连接无法·通过垃圾回收机制进行回收,所以需要手手动关闭。
FileWriter测试
@Test
public void testFileWriter() throws IOException {
//创建文件类对象
File file=new File("hello1.txt");
//创建流对象
FileWriter tr = new FileWriter(file,true);
//写入数据
tr.write("Welcome to China".toCharArray());
tr.write(" Jerry");
//关闭流
tr.close();
}
说明:
①再通过写入流向文件中写入数据时,可以直接使用write方法
说明:
②输出操作,对应的File可以不存在的。并不会报异常
③ File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。
File对应的硬盘中的文件如果存在:
若流使用的构造器是:FileWriter(file,false) / FileWriter(file):对原有文件的 覆盖
若流使用的构造器是:FileWriter(file,true):不会对原有文件覆盖,而是在原有 文 件基础上追加内容
常用的write()重载方法