专门操作文本文件的字符流和字符缓冲流

虽然转换流可以按照指定的字符集读写文本文件,但是转换流读写文本文件代码写起来还是比较麻烦。如果你读写的文件是UTF-8编码格式,Java还给我们提供了两个读写字符文件的便捷类FileReader和FileWriter来简化代码的书写。

FileReader读文件

读取C:\io\a.txt文件【UTF-8格式】的所有字符

public class FileReaderDemo1{
    public static void main(String[] args){
        //创建流对象
        FileReader fr=new FileReader("C:\\io\\a.txt");
        //一次读取多个字符
        char[] chs=new char[1024];
        int len;//记录每次读取的字符个数
        while((len=fr.read(bs))!=-1){
            String str=new String(chs,0,len);
            System.out.print(str);
        }
        //释放资源
        fr.close();
    }
}

FileWriter写文件

C:\io\\b.txt文件【UTF-8格式】中写字符数据

public class FileReaderDemo1{
    public static void main(String[] args){
        //创建输出流对象
        FileWriter fw=new FileWriter("C:\\io\\b.txt");

        //写一个字符串
        fw.write("www.itheima.com");
        //写一个换行
        fw.write("\r\n");
        //写一个字符数组
        char[] chs={'中','国','A','a','9'}
        fw.write(chs);
        //写一个字符数组的前2位
        fw.write(chs,0,2);

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

字符流复制文件

C:\io\a.txt文件中【UTF-8格式】的所有内容复制到C:\io\b.txt文件中【UTF-8格式】

public class CopyDemo1{
    public static void main(String[] args){
        //创建流对象
        FileReader fr=new FileReader("C:\\io\\a.txt");
        //创建输出流对象
        FileWriter fw=new FileWriter("C:\\io\\b.txt");

        //一次读取多个字符
        char[] chs=new char[1024];
        int len;//记录每次读取的字符个数
        while((len=fr.read(bs))!=-1){
            //一次写人多个字符
            fw.write(chs,0,len);
        }

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

字符缓冲流

字符缓冲流是基于另一个字符流做一些功能增强,并且在内部创建一个缓冲区数组,来提高读写的效率。

BufferedReader可以对Reader的子类进行功能增强,提高读取字符的效率;
BufferedWriter可以对Writer的子类进行功能增强,提高写入字符的效率。

一次复制多个字符
我们以复制文本为例,把C:\io\a.txt文件中的字节复制到C:\io\b.txt文件中

public class CopyDemo2{
    public static void main(String[] args){
        //创建流对象
        BufferedReader br=new BufferedReader(new FileReader("C:\\io\\a.txt"));
        //创建输出流对象
        BufferedWriter bw=new BufferedWriter(new  FileWriter("C:\\io\\b.txt");

        //一次读取多个字符
        String line;
        String len;//记录每次读取的字符个数
        while((len=br.readLine())!=null){
            //一次写人多个字符
            bw.write(line);
            bw.newLine();
            bw.flush(); //刷新(可以省略)
        }

        //释放资源
        bw.close();
        bw.close();
    }
}

一次复制一行字符
字符缓冲流除了可以使用Reader和Writer的基本方法之外,还提供了写两个特有方法,readLine()newLine()

readLine()  读取文件中的一行(不包括换行符)
newLine()   写一个换行符(能跨平台)

我们以复制文本为例,把C:\io\a.txt文件中的字节复制到C:\io\b.txt文件中

public class CopyDemo2{
    public static void main(String[] args){
        //创建流对象
        BufferedReader br=new BufferedReader(
            new FileReader("C:\\io\\a.txt"));
        //创建输出流对象
        BufferedWriter bw=new BufferedWriter(
            new  FileWriter("C:\\io\\b.txt");

        //一次读取多个字符
        char[] chs=new char[1024];
        int len;//记录每次读取的字符个数
        while((len=br.read(bs))!=-1){
            //一次写人多个字符
            bw.write(chs,0,len);
        }

        //释放资源
        bw.close();
        bw.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值