Java基础--------(7)IO流Reader和Writer

一、简述

Reader和Writer是专门用于读写字符流的抽象类。
Writer和Reader有许多子类,且子类肯定重写了父类的write或者read的方法。

字节流处理单元为1个字节, 操作字节和字节数组。
与字节流不同的是,字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
所以可以通过使用Reader和Writer类向使用其他类型的流以及字符串进行输入和输出。

二、转换流

想要通过Reader和Writer对流进行输入输出,必定需要实现两种流的转换。
InputStreamReader:将字节输入流转换成字符输入流。
OutputStreamWriter:将字节输出流转换成字符输出流。

字符,首先要考虑的就是编码问题,所以,转换流有个重要的功能就是能设置编码,构造函数第二个参数传入对应编码。new OutputStreamWriter(out,”utf-8”)

三、字符流对象

1.BufferedReader 和 BufferedWriter
可以按行读写的缓冲输入输出流

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class BufferedReaderDemo {
    public static void main(String[] args) {
        InputStreamReader isr = null;
        OutputStreamWriter osr = null;
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            File bwtxt = new File("."+File.separator+"bw.txt");
            if(!bwtxt.exists())
                bwtxt.createNewFile();

            File brtxt = new File("."+File.separator+"bw.txt");
            if(!brtxt.exists())
                brtxt.createNewFile();
            osr = new OutputStreamWriter(new FileOutputStream(bwtxt),"utf-8");//设置编码
            isr = new InputStreamReader(new FileInputStream(brtxt),"utf-8");

            bw = new BufferedWriter(osr);
            bw.write("哈哈哈哈哈哈 22222");//写入字符串
            bw.newLine();//根据对应操作平台,插入换行符
            bw.write("啊啊啊啊啊啊啊\n啊啊啊啊啊啊啊啊啊啊啊啊\n啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊");
            bw.flush();//刷新流

            br = new BufferedReader(isr);
            int i=0;
            while(br.read()!=-1){
                System.out.println(br.readLine());//读取一行,没有数据为null
                i++;
            }
            isr.close();
            osr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.CharArrayWriter和CharArrayReader

CharArrayReader的作用就是把字符数组作为源读取

import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.util.Arrays;

public class CharArrayReaderDemo {

    public static void main(String[] args) {

        try {
            CharArrayWriter caw = new CharArrayWriter();
            caw.write("123哈啊哈哈123");

            CharArrayReader car = new CharArrayReader(caw.toCharArray());
            char[] cbuf = new char[100];
            car.read(cbuf);
            System.out.println(Arrays.toString(cbuf));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值