一.文件
File类:与平台无关的文件和目录.使用File可以操作文件和目录的信息,例如删除,创建,重命名等.但是不能操作文件的内容,这需要使用IO类来完成.
FilenameFilter:文件过滤器,可以配合File使用检索复合要求的文件.
二.IO流
在java中使用流”stream”来抽象IO源.
下面是IO类分类图,图片来源于互联网
从上图可以很清晰的看出,IO流主要分为两大类:字节IO,字符IO
字节流都包含后缀InputStream/OutputStream.
字符流都包含后缀Reader/Writer.
类名称的前部表示处理的具体流对象.
具体实现类的分类如下,省略了后缀:
先理清楚这些类的结构和功能.
面对这么多的类,该如何使用?
我们可以记住一个基本的流程:
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 包含了读取文件内容的指针,可以自由定义文件记录指针的位置,随意的访问文件中的内容,不必像文件输入流那样顺序读.
可以设置文件访问的格式.读,写,更新等.