JavaIO——字符流

概述

字节流提供了大量的访问相关类型输入/输出操作的功能,但是不能直接处理Unicode字符。字节流类由两个抽象字符流类Reader和Writer类派生出了多个具体子类,子类必须实现的方法只有read()/writer()和close()。但是,多数子类将覆盖此处定义的一些方法,以提高更高的效率或扩展其他功能。

文件字符输入/输出流

  • FileReader继承Reader类,创建一个可以读取文件内容的Reader类。构造函数如下:
    1.public FileReader(String fileName),参数为要读取的文件名
    2.public FileReader(File file),参数为要读取的文件
    3.public FileReader(FileDescriptor fd),参数为文件的绝对路径
  • FileWriter继承Writer类,创建一个可以读取文件内容的Writer类。构造函数如下:
    1.public FileWriter(String fileName),参数为要读取的文件名
    2.public FileWriter(String fileName, boolean append),参数为文件名,append如果为true,则输出附加至文件尾
    3.public FileWriter(File file),参数为要读取的文件
  • 示例:
public class TestFile{
    public static void main(String[] args){
        FileReader fileReader = null;
        FileWriter fileWriter = null;
        try {
            fileReader = new FileReader("E:/Java/a.txt");
            fileWriter = new FileWriter("E:/Java/b.txt");
            int temp = 0;
            while(temp != -1){
                temp = fileReader.read();
                fileWriter.write(temp);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                fileReader.close();
                fileWriter.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

字符输入/输出流

  • 若想对输入流InputStream和输出流OutputStream进行字符处理,可以使用字符输入输出流为其加上处理字符的功能。
  • InputStreamReader是字节流通向字符流的桥梁,使用指定的charset类的对象读取字节并将其解码为字符,其使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。每次调用InputStreamReader中的一个read()方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。为了达到最高效率,需要考虑在BufferedReader内包装InputStreamReader。
  • OutputStreamWriter是字符流通向字节流的桥梁。使用指定的charset将要向其写入的字符编码为字节,其使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。每次调用write()方法都会针对给定的字符(或字符集)调用编码转换器。在写入基础输出流之前,得到的这些字节会在缓冲区累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。
  • 注意,传递到此write()方法的字符是未缓冲的。为了达到最高效率,可考虑将OutputStreamWriter包装到BufferedWriter中以避免频繁调用转换器。
  • 示例:
public class TestCharStream {
    public static void main(String[] args) throws IOException {
        InputStreamReader isr = new InputStreamReader(new FileInputStream("E:/Java/a.txt"));
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:/Java/b.txt"));
        
        osw.write(isr.read());
        
        isr.close();
        osw.close();
    }
}

字符缓冲流

  • BufferedReader/BufferedWriter原理方式基本与字节缓冲流相似,从而提供字符、数组和行的高效读取和写入。
  • 示例:
public class TestDemo {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String s = bufferedReader.readLine();
        System.out.println(s);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值