一.文件

File类:与平台无关的文件和目录.使用File可以操作文件和目录的信息,例如删除,创建,重命名等.但是不能操作文件的内容,这需要使用IO类来完成.

FilenameFilter:文件过滤器,可以配合File使用检索复合要求的文件.

二.IO流

在java中使用流”stream”来抽象IO源.

下面是IO类分类图,图片来源于互联网

java 文件分片下载 java文件分类_java 文件分片下载

 

从上图可以很清晰的看出,IO流主要分为两大类:字节IO,字符IO

字节流都包含后缀InputStream/OutputStream.

字符流都包含后缀Reader/Writer.

类名称的前部表示处理的具体流对象.

具体实现类的分类如下,省略了后缀:

java 文件分片下载 java文件分类_输入流_02

先理清楚这些类的结构和功能.

面对这么多的类,该如何使用?

我们可以记住一个基本的流程:

1.确定要操作的是字节还是字符

2.确定你是要读还是要写.

3.确定要操作的对象(文件,数组,字符串,管道等)

依据上面三步,你可以从繁多的流中找到你要的类.

4.是否需要缓冲流包装实体流以提高读写速度.(包装类)

5.为了便捷的操作,是否需要进行流的转换(包装类)

例如快速的按行读取字节文件

操作字节,读,文件流,FileInputStream

为了加速,按行读取.需要BufferedReader和InputStreamReader

包装一下:

BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream(fileObject)))

记住IO操作一般需要捕捉异常IOException

介绍一下特殊的流 PushbackInputStream和PushbackReader,推回输入流.它也是一个包装类.

一般的流读取一段数据后,下次读取的位置会自动后移.

而有时候我们需要重复读取一段内容,这就需要使用推回输入流了.它的原理是在内存中开辟一个推回缓冲区保存需要重复读取的数据,当要读取得数据超过缓冲区内容时,再从原输入流读取数据到推回缓冲区.

它们有方法将数据推回到缓冲区中:unread().

使用read()方法读取数据,使用unread()推回数据,当再次使用read时就相当于在原读取位置往后继续读取.

 

重定向标准输入/输出

标准输入输出为键盘和控制台

通过System.out提供的setIn(),setOut(),setError(),可以重定向标准输入输出到其他流,例如文件

三.文件随机访问流RandomAccessFile

RandomAccessFile 包含了读取文件内容的指针,可以自由定义文件记录指针的位置,随意的访问文件中的内容,不必像文件输入流那样顺序读.

可以设置文件访问的格式.读,写,更新等.