day19Java-IO-FileReader(Writer)-字符流

博客名称
Java-(中级)

IO-FileReader(Writer)-字符流

java.io.Writer 继承者 java.io.OutputStreamWriter 继承者 java.io.FileWriter
java.io.Reader 继承者 java.io.InputStreamReader 继承者 java.io.FileReader

由于我们常见的操作都是使用本地默认编码,所以,不用指定编码。
而转换流的名称有点长,所以,Java就提供了其子类供我们使用。

OutputStreamWriter = FileOutputStream + 编码表(GBK)
FileWriter = FileOutputStream + 编码表(GBK)

InputStreamReader = FileInputStream + 编码表(GBK)
FileReader = FileInputStream + 编码表(GBK)

需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中
数据源:
 	a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader
目的地:
  	b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter

代码演示:

public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        //封装数据源
        FileReader fr = new FileReader("a.txt");
        //封装目的地
        FileWriter fw = new FileWriter("b.txt");

        //一次读取一个字符
        //返回实际读取的值
        int ch = 0;
        while ((ch=fr.read())!=-1){
            fw.write(ch);
            //刷新缓冲区
            fw.flush();
        }

        //释放资源
        fr.close();
        fw.close();

        //封装数据源
        FileReader fr2 = new FileReader("a.txt");
        //封装目的地
        FileWriter fr3 = new FileWriter("c.txt");

        //一次读取一个字符数组
        char[] chars = new char[1024];
        //返回实际读取的长度
        int len = 0;
        while ((len=fr2.read(chars))!=-1){
            fr3.write(chars,0,len);
            //刷新缓冲区
        }
        //关闭流
        fr2.close();
        fr3.close();
    }
}

结果:b.txt和c.txt文件内容一样

package com.ginger.demo03;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class OutputStreamWriterDemo {
    public static void main(String[] args) throws IOException {
        //OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
        //默认字符集utf-8
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c.txt"));
        osw.write("中国");
        osw.close();//中国

        //OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
        OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("c.txt"), "gbk");
        osw2.write("中国");//�й�
        osw2.close();
    }
}
需求:把D:\a.txt内容复制到E:\b.txt中
数据源:
  		c:\\a.txt -- FileReader
目的地:
  		d:\\b.txt -- FileWriter

代码演示

public class FileReaderDemo02 {
    public static void main(String[] args) throws IOException {
        //封装数据源
        FileReader fr = new FileReader("D:\\a.txt");
        //封装目的地
        FileWriter fw = new FileWriter("E:\\b.txt");

        //一次读取一个字符
        //返回实际读取的值
        int ch= 0;
        while((ch=fr.read())!=-1){
            fw.write(ch);
        }
        //关闭流
        fr.close();
        fw.close();

        //封装数据源
        FileReader fr2 = new FileReader("D:\\a.txt");
        //封装目的地
        FileWriter fw2 = new FileWriter("E:\\c.txt");

        //一次读取要给字符数组
        char[] chars = new char[1024];
        //返回实际读取的长度
        int len = 0;
        while ((len=fr2.read(chars))!=-1){
            fw2.write(chars,0,len);
            //刷新缓冲区
            fw2.flush();
        }
        //关闭流
        fr2.close();
        fw2.close();
    }
}

结果:b.txt和c.txt的内容一样

package com.ginger.demo03;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class OutputStreamWriterDemo {
    public static void main(String[] args) throws IOException {
        //OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
        //默认字符集utf-8
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c.txt"));
        osw.write("中国");
        osw.close();//中国

        //OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
        OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("c.txt"), "gbk");
        osw2.write("中国");//�й�
        osw2.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值