Java I/O 系统设计和使用
Java I/O 系统是 Java 编程语言中的一项重要组件,对于编程语言的设计者来说,创建一套好的输入输出(I/O)系统是一项难度极高的任务。这是因为有很多的 I/O 源和目的(文件、控制台、网络连接等),以及许多方法(顺序的、随机的、缓存的、二进制的、字符方式的、行的、字的等等)。
Java 类库的设计者们用“创建很多类”的办法来解决这个问题,因此 Java I/O 系统的类实在太多了,以至于初看起来会把人吓着。但是,这种设计实际上是限制了类的爆炸性增长。
Java 在 1.0 版之后又对其 I/O 类库进行了重大的修改,原先是面向 byte 的,现在又补充了面向 Unicode 字符的类库。为了提高性能,完善功能,JDK 1.4 又加了一个 nio(意思是“new I/O")。
File 类是 Java 标准类库中的一个重要的 I/O 类,它可以用来表示某个文件的名字,也可以用它来表示目录里一组文件的名字。如果它表示的是一组文件,你还可以用 list() 方法来进行查询,让它会返回 String 数组。由于元素数量是固定的,数组会比容器更好一些。
FilenameFilter 接口是一个专门负责挑选显示 File 对象的内容的类。它的 accept() 方法需要两个参数,一个是 File 对象,表示这个文件是在哪个目录里面的;另一个是 String,表示文件名。虽然你可以忽略它们中的一个,甚至两个都不管,但是你大概总得用一下文件名吧。
在使用 File 类时,我们可以使用匿名内部类来创建一个 FilenameFilter,例如:
```java
public class DirList2 {
public static FilenameFilter filter(final String afn) {
return new FilenameFilter() {
String fn = afn;
public boolean accept(File dir, String n) {
// Strip path information:
String f = new File(n).getName();
return f.indexOf(fn) != -1;
}
};
}
}
```
这只是 Java I/O 系统的一部分,为了全面了解 Java 的 I/O 类库,需要学习大量的类,并了解 I/O 类库的演化历史。