上一节我们学习了,用InputStreamReader来将输入字节流按照一定的编码,然后转成我们认识的字符,而且后来我们还用它读取的文件;用OutputStreamWriter来将字符按照一定的编码写入到输出流字节流中,我们也用它写入了数据到文件。读取文件的时候,因为InputStreamReader需要一个InputStream对象来构建对象,所以我们创建了一个FileInputStream对象传入到InputStreamReader中;OutputStreamWriter同理。输入输出流的家族非常的庞大,我并不想在这里展示它的家族体系,因为没有意义。我想通过一篇讲一种流的方式,最后再总结它们的家族体系,这样思路会清晰的多。所以,这一篇我们讲文件字符流。
我们回想一下这个过程:我们想要按字符读取文件的话,首先我们得创建一个文件流,然后将文件流包装成字符流,然后再用字符流去操作。有那么一点点的麻烦吧!有没有什么办法,我就想通过字符流直接读取文件呢?有!
FileReader
Java提供了FileReader类供我们直接读取文件,而不需要创建文件流。它被定义在jdk的java.io包下,我们先来看看这个类:
public class FileReader extends InputStreamReader {}
这是FileReader的类定义,它继承了InputStreamReader类。所以InputStreamReader类下的所有的public和protected的方法都可以用。我们来看看它提供了哪些特有的方法!
public FileReader(String fileName) throws FileNotFoundException {
super(new FileInputStream(fileName));
}
public FileReader(File file) throws FileNotFoundException {
super(new FileInputStream(file));
}
public FileReader(FileDescriptor fd) {
super(new FileInputStream(fd));
}
它什么特殊的方法都没有提供,仅仅是帮我们构建了一个FileInputStream对象,然后直接调用InputStreamReader的构造方法。调用这个类的读取方法就是调用父类的方法,没啥好讲的!
看到这里,我们不禁想问。FileWriter是不是也和FileReader一样呢?一起来看看!
FileWriter
和FileReader一样,我们通过它写文件不需要创建文件流。先来看看它的类定义:
public class FileWriter extends OutputStreamWriter {}
这是FileWriter的类定义。和我们想的一样,FileWriter继承自OutputStreamWriter!看看FileWriter有没有提供其他特殊的方法吧!
public FileWriter(String fileName) throws IOException {
super(new FileOutputStream(fileName));
}
public FileWriter(String fileName, boolean append) throws IOException {
super(new FileOutputStream(fileName, append));
}
public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}
public FileWriter(File file, boolean append) throws IOException {
super(new FileOutputStream(file, append));
}
public FileWriter(FileDescriptor fd) {
super(new FileOutputStream(fd));
}
没错,一个都没有!用法和上一篇一样啊,不多讲!现在IO流家族又多了两个貌似有用的成员!
IO流家族成员

1424

被折叠的 条评论
为什么被折叠?



