第5节:FileReader和FileWriter

上一节我们学习了,用InputStreamReader来将输入字节流按照一定的编码,然后转成我们认识的字符,而且后来我们还用它读取的文件;用OutputStreamWriter来将字符按照一定的编码写入到输出流字节流中,我们也用它写入了数据到文件。读取文件的时候,因为InputStreamReader需要一个InputStream对象来构建对象,所以我们创建了一个FileInputStream对象传入到InputStreamReader中;OutputStreamWriter同理。输入输出流的家族非常的庞大,我并不想在这里展示它的家族体系,因为没有意义。我想通过一篇讲一种流的方式,最后再总结它们的家族体系,这样思路会清晰的多。所以,这一篇我们讲文件字符流。

我们回想一下这个过程:我们想要按字符读取文件的话,首先我们得创建一个文件流,然后将文件流包装成字符流,然后再用字符流去操作。有那么一点点的麻烦吧!有没有什么办法,我就想通过字符流直接读取文件呢?有!

FileReader


Java提供了FileReader类供我们直接读取文件,而不需要创建文件流。它被定义在jdk的java.io包下,我们先来看看这个类:

public class FileReader extends InputStreamReader {}

这是FileReader的类定义,它继承了InputStreamReader类。所以InputStreamReader类下的所有的publicprotected的方法都可以用。我们来看看它提供了哪些特有的方法!

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流家族成员


转载于:https://my.oschina.net/u/3962062/blog/3098363

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值