java io系列22之 FileReader和FileWriter

本文摘抄至 : skywang12345

摘要 : FileReader文件字符输入流、用于将文件内容以字符形式读取出来、一般用于读取字符形式的文件内容、也可以读取字节形式、实际上就是 调用父类(InputStreamReader)的 默认编码读取方法。FileWriter 文件字符输出流、主要用于将字符写入到指定的打开的文件。其实就是调用父类(OutputStreamWriter)默认编码函数。由于编码不可控,使用不是太灵活。

FileReader 是用于读取字符流的类,它继承于 InputStreamReader。要读取原始字节流,请考虑使用 FileInputStream。
FileWriter 是用于写入字符流的类,它继承于OutputStreamWriter。要写入原始字节流,请考虑使用 FileOutputStream。

FileReader和FileWriter源码分析


1. FileReader 源码(基于jdk1.7.40

package java.io;


public class FileReader extends InputStreamReader {

    //在给定从中读取数据的文件名的情况下创建一个新 FileReader。   
    public FileReader(String fileName) throws FileNotFoundException {
        super(new FileInputStream(fileName));
    }

     //在给定从中读取数据的 File 的情况下创建一个新 FileReader。   
     public FileReader(File file) throws FileNotFoundException {
        super(new FileInputStream(file));
    }

    //在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。  
    public FileReader(FileDescriptor fd) {
        super(new FileInputStream(fd));
    }

}

从中,我们可以看出FileReader是基于InputStreamReader实现的。

2. FileWriter 源码(基于jdk1.7.40)

package java.io;


public class FileWriter extends OutputStreamWriter {


    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));
    }

}

从中,我们可以看出FileWriter是基于OutputStreamWriter实现的。

示例程序


public class FileReaderWriterTest {

    private static final String FileName = "file.txt";
    private static final String CharsetName = "utf-8";

    public static void main(String[] args) {

        testWrite();
        testRead();
    }

    private static void testWrite() {

        try {
            // 创建文件“file.txt”对应File对象
            File file = new File(FileName) ;
             // 创建FileOutputStream对应FileWriter:将字节流转换为字符流,
            //即写入out1的数据会自动由字节转换为字符。
            FileWriter out1 = new FileWriter(file) ;
            // 写入10个汉字
            out1.write("字节流转为字符流示例");
            // 向“文件中”写入"0123456789"+换行符
            out1.write("0123456789\n");

             out1.close();

        } catch (Exception e) {
            e.printStackTrace() ;
        }
    }

     private static void testRead() {

         try {
             // 方法1:新建FileInputStream对象
             // 新建文件“file.txt”对应File对象
             File file = new File(FileName);
             FileReader in1 = new FileReader(file);

            // 测试read(),从中读取一个字符
             char c1 = (char)in1.read();
             System.out.println("c1="+c1);

            // 测试skip(long byteCount),跳过4个字符
             in1.skip(6);

            // 测试read(char[] cbuf, int off, int len)
             char[] buf = new char[10];
             in1.read(buf, 0, buf.length);
             System.out.println("buf="+(new String(buf)));

             in1.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
     }
}

运行结果:

c1=字
buf=流示例0123456

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值