输入和输出概述(IO)概述:
什么是IO:(Input/Output):输入和输出.
IO设备: 和电脑通信的设备.
输入设备:麦克风,扫描器,键盘,鼠标等.
输出设备:显示器,打印机,投影仪,耳机,音响等.
----------------------------------------------------------------------------
为什么程序需要IO呢?
案例1:打游戏操作,得分比较高,存储游戏的信息(XXX-888分).
此时需要把游戏中的数据存储起来,只能存储在文件中.
案例2:打游戏操作,查看游戏英雄榜, 英雄榜的数据存储在一个文件中的.
此时游戏程序需要去读取文件中的数据,并显示在游戏中.
案例3:上传和下载操作.
IO操作是一个相对的过程,一般的,我们在程序角度来思考(程序的内存).
程序需要数据: 把数据流入到程序中,输入.
程序需要保存数据,把数据传递给别人: 输出.
IO流的分类和操作模板:
--------------------------------------------------------------
IO流的分类,站在不同的角度,分类方式是不一样滴:
1):根据流向划分: 输入流和输出流.
2):根据数据的单位划分: 字节流和字符流.
3):根据功能的划分:节点流和包装流.
--------------------------------------------------------------
四大基流:(字节输出流,字节输入流,字符输出流,字符输入流)
四大基流都是抽象类: 其他流都是继承于这四大基流的.
我们不能创建四大基流的对象,只能创建其子类对象.
无论是什么流,都有close方法,用来关闭资源.
如果操作文件,就得开通一个流对象关联我们得磁盘文件,如果不关闭资源,那么磁盘的文件一直被程序所引用着,不能删除,也不能更改.
操作IO流的模板:
1):创建源或者目标对象(挖井).
拿文件流举例:
输入操作: 把文件中的数据流向到程序中,此时文件是源,程序是目标.
输出操作: 把程序中的数据流向到文件中,此时文件是目标,程序是源.
2):创建IO流对象(水管).
输入操作: 创建输入流对象.
输出操作: 创建输出流对象.
3):具体的IO操作.
输入操作: 输入流对象的read方法.
输出操作: 输出流对象的write方法.
4):关闭资源(勿忘). 一旦资源关闭之后,就不能使用流对象了,否则报错.
输入操作: 输入流对象.close();
输出操作: 输出流对象.close().
--------------------------------------------------------------
操作IO流的六字箴言:
读进来,写出去.
读进来: 进来强调了是输入, 读说明是read方法.
写出去: 出去强调了是输出,写说明是write方法.
文件流概述:
文件流: 顾名思义,程序和文件打交道.
此时我们谈及的文件,值得是纯文本文件(txt的,不要使用Word,Excel),
-----------------------------------------------------------------
在字节流中,暂时不要使用中文.
FileInputStream: 文件的字节输入流
FileOutputStream: 文件的字节输出流
FileReader:文件的字符输入流
FileWriter:文件的字符输出流
文件拷贝操作和资源的正确关闭:
资源的正确关闭:
关闭和刷新
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush
方法了。
-
flush
:刷新缓冲区,流对象可以继续使用。 -
close
:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
public class FWWrite {
public static void main(String[] args) throws IOException {
// 使用文件名称创建流对象
FileWriter fw = new FileWriter("fw.txt");
// 写出数据,通过flush
fw.write('刷'); // 写出第1个字符
fw.flush();
fw.write('新'); // 继续写出第2个字符,写出成功
fw.flush();
// 写出数据,通过close
fw.write('关'); // 写出第1个字符
fw.close();
fw.write('闭'); // 继续写出第2个字符,【报错】java.io.IOException: Stream closed
fw.close();
}
}小贴士:即便是flush方法写出了数据,操作的最后还是要调用close方法,释放系统资源。