一、什么是IO流
1.1 概述
- IO流是输入和输出的数据,也称为数据流。流形象的概念,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的。
- 程序需要读取数据的时候,就会开启一个通向数据源的管道,程序就可以从中提取数据。其输入输出的过程可以用下图来表示。

- 程序从数据源(包括各种输入设备,如键盘、磁盘、文件等)中读取数据称之为输入。
- 程序将数据写入目标设备(包括各种输出设备,如显示器、磁盘、文件等)称之为输出。
1.2 Java中的数据流
Java中的数据流分为2种:
其中InputStream和OutputStream表示字节流。
- Reader和Writer表示字符流,其他流均是继承这4个抽象类而来的。
2.1 字符输入流
1、字符输入流用于以字符的形式从数据源中读取数据。Reader类是字符输入流的基类,该类包括的子类有:
2、Reader类中定义的方法及方法描述:
| 方法 | 方法描述 |
|---|---|
| abstract void close() | 关闭输入流 |
| void mark () | 在输入流中标记当前位置 |
| boolean markSupported () | 测试输入流是否支持mark()和reset()方法 |
| int read () | 从输入流读取下一字符 |
| int read (char[] cbuf) | 从输入流读取若干字符数据,并存储到字符数组 |
| abstract int read (char[] cbuf, int off, intlen) | 从输入流读取至多len个字符数据,并存储到字符数组 |
| boolean void ready () | 判断是否准备读取输入流 |
| void reset () | 将输入流重新定位到mark()方法标记的位置 |
| long skip (long n) | 跳过输入流中n个字符数据 |
【例2.1-1】在c:\temp下创建文本文件example01.txt,内容如下:
读取文件内容并去掉逗号输出。
2.2 字符输出流
1、字符输出流用于以字符的形式将数据写入目标设备。Writer类是字符输出流的基类,该类包括的子类有:
2、Writer类中定义的方法及方法描述:
| 方法 | 方法描述 |
|---|---|
| abstract void close() | 关闭输出流 |
| abstract void flush() | 刷新输出流,强制将缓冲区内容写入输出流 |
| void write(char[] cbuf) | 将指定字符数组的内容写入输出流 |
| abstract void write(char[] cbuf,int off,int len) | 将指定字符数组从off位置开始的len个字符写入输出流 |
| write(int c) | 将指定的字符写入输出流 |
| write(String str) | 将指定的字符串写入输出流 |
| write(String str,int off,int len) | 将指定字符串从off位置开始的len个字符写入输出流 |
【例2.2-1】将c:\temp下文本文件example01.txt复制到c:\temp下并改名为example02.txt。
2.3 字节流
1、字节流与字符流操作方法一样。
2、字节输入流InputStream,子类为FileInputStream。
3、字节输出流OutputStream,子类为FileOutStream。
4、将以上2例题用字节流改写。
三、文件类File
3.1 文件类
- File类是一个可以对文件本身的属性进行操作的类。例如,可以使用File类中的方法获取文件或者目录的信息,还可以对文件进行创建、修改和删除等操作。
- File类除了对文件进行操作外,Java允许使用File类将目录当作文件进行处理。
1、File类定义的一些主要方法
| 方法 | 方法描述 |
|---|---|
| booleancanRead() | 判断文件是否可读,可读则返回真,否则返回假 |
| booleancanWrite() | 判断文件是否可写,可写则返回真,否则返回假 |
| boolean exists() | 判断文件是否是指定路径中的文件或目录,是则返回真,否则返回假 |
| booleanisFile() | 判断File的对象是否是文件,是则返回真,否则返回假 |
| booleanisDirectory() | 判断File的对象是否是目录,是则返回真,否则返回假 |
| booleanisAbsolute () | 判断File的对象是否是一个文件或目录的绝对路径,是则返回真,否则返回假 |
| String getAbsolutePath() | 返回一个包含文件或目录的绝对路径的字符串 |
| long length() | 返回文件字节长度,若为目录则返回0 |
| boolean delete() | 删除文件或目录,成功返回true |
【例2.3-1】将c:\temp下文本文件example01.txt复制到c:\temp\当天日期目录下并改名为example02.txt。

【练习】
1、将c:\temp下文本文件example01.txt复制到c:\temp\当天日期目录下,文件名以时间戳为文件名。
