本文介绍Java的文件操作,包括一些高级的文件操作类及其方法
在我的博客Java文件操作(一)中介绍了Java文件读写的基本知识
1)File类用来创建一个新的文件对象
2)Scanner类、FileReader类用来读取(文本)文件
3)PrintWriter类、FileWriter类用来写入(文本)文件
/**使用PrintWriter对象对文本文件进行写入操作*/
PrintWriter outpt = new PrintWriter("temp.txt");
output.print("Welcome to Java!");
output.close();
/**使用Scanner对象对文本文件进行读取操作*/
Scanner input = new Scanner(new File("temp.txt"));
System.out.print(input.nextLine());
有很多文件I/O操作相关的类,总的来说它们分为输入类(input class)和输出类(output class)
一个输入类对象实例(input object)也叫输入流(input stream),一个输出对象实例(output object)也叫输出流(output stream)
计算机通过流来完成I/O操作
通俗来讲,流就是计算机之间流动的数据序列,也是类的对象,Java中的流动方式是建立在数据交换源和目的之间的一条通信通道;其中,数据源是之可以提供数据的地方,包括键盘、磁盘文件、网络接口(网络也是特殊的文件I/O),输入流是指从计算机内部传向程序的流,输出流是指从程序传到外部的流,输入流只能写数据,输出流只能读数据
所谓的输入、输出,都是以程序为中心的
Java中数据分为字符流和字节流,其中字符流主要处理文本文件,字节流主要用于处理二进制文件
前面讲到,二进制文件通常用字节流处理
相比于处理文本文件的字符流,字节流具有以下特点:
1)操作的基本单元是字节
2)默认不使用缓冲区
3)不需要编码(encode)和解码(decode),相比于字符流更高效
4)通常用于处理二进制数据
不管是字节流还是字符流,都可以分为输入流和输出流
它们都直接继承自Object类
其中FilterXXStream又可以分为DataXXStream、BufferXXStream
这里我们着重讲继承关系的第三层即FileXXStream、FilterXXStream、ObjectXXStream
继承关系
java.lang.Object
java.io.XxxputStream //InputStream、OutputStream都是抽象类,但是为其子类定义了一些非抽象方法
java.io.FileXxxputStream
在介绍二进制字节流的读写方法之前,要明确一点:调用这些方法的调用者都要在方法签名处声明java.io.IOException
(或者try-catch
捕获之)
常用方法
read(): int
read(b: byte[]): int
read(b: byte[], off: int, len: int): int
close(): void
skip(n: long): long
常用方法
write(int b): void
write(b: byte[]): void
write(b: byte[], off: int, len: int): void
close(): void
flush(): void
继承关系
java.lang.Object
java.io.XxxStream
java.io.FilterXxxStream
成员字段
FilterXxxStream有一个protected修饰的来自XxxStream类的成员字段
protected InputStream in; //来自FilterInputStream
protected outputStream out; //来自FilterOutputStream
构造方法
FilterXXStream类的构造方法很特别,是protected修饰的
proteted FilterXxxStream(InputStream in){
this.in = in;
}
有什么用
看懂英文,Filter是『过滤』的意思
通俗地讲,FilterInputStream用来封装其它的输入流,并为它们提供额外的功能,FilterOutputStream用来封装其它的输出流,并为它们提供额外的功能
学术点,就是装饰器的作用——每封装一次,就添加一个新功能
看名字就知道,这是用来对序列化对象进行读写操作的类
java.lang.Object
java.io.InputStream
java.io.ObjectInputStream
java.lang.Onbject
java.io.OutputStream
java.io.ObjectOutputStream
public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
public class ObejctOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants
以后用到时可能会补充进来