字符流

字符流

字符流的抽象超类

Writer

用于写入字符流的抽象类。

写数据的 5 种方式:

方法名说明
void write(int c)写一个字符
void write(char[] cbuf)写入一个字符数组
abstract void write(char[] cbuf, int off, int len)写入字符数组的一部分
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分

其它方法:

方法名说明
abstract void flush()刷新流
abstract void close()关闭流,先刷新

Reader

用于读取字符流的抽象类。

读数据的 2 种方式:

方法名说明
int read()读一个字符,如果已经达到流的末尾,则返回 -1
int read(char[] cbuf)将字符读入数组,如果已经达到流的结尾,则返回 -1

字符流和字节流间的桥梁

OutputStreamWriter

是从字符流到字节流的桥梁,它写入字符,可以使用指定的编码将写入的字符编码为字节。

	// OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("io.txt"), "GBK");
	OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("io.txt"));
    osw.write("i love 杭州");
    // 如果没有下面这行代码,文件中将不会写入内容;
    // 下面这行代码换成 osw.flush(),文件中也会写入内容
    osw.close();

注意事项

  • 使用字符流写入字符时,需刷新流,文件才会有刷新之前写入的对应字符。
  • 使用 flush() 方法刷新流时还可继续向文件写入字符
FileWriter

写入字符文件的便捷类。OutputStreamWriter 的直接子类,简化 OutputStreamWriter 的构造写法。但是当需要指定字符编码时,还是必须使用 OutputStreamWriter。

	FileWriter fw = new FileWriter("io.txt");
    fw.write("i love 杭州");
    fw.close();

InputStreamReader

是从字节流到字符流的桥梁,它读取字节,可以使用指定的编码将其解码为字符。

	// InputStreamReader isr = new InputStreamReader(new FileInputStream("io.txt"), "GBK");
	InputStreamReader isr = new InputStreamReader(new FileInputStream("io.txt"));
    char[] chars = new char[1024];
    int len;
    while ((len = isr.read(chars)) != -1) {
        System.out.println(new String(chars, 0, len));
    }
    isr.close();
FileReader

读取字符文件的便捷类。InputStreamReader 的直接子类,简化 InputStreamReader 的构造写法。但是当需要指定字符编码时,还是必须使用 InputStreamReader。

	FileReader fr = new FileReader("io.txt");
    char[] chars = new char[1024];
    int len;
    while ((len = fr.read(chars)) != -1) {
        System.out.println(new String(chars, 0, len));
    }
    fr.close();

字符缓冲流

BufferedWriter

将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。

特有方法:

方法名说明
void newLine()写一行行分隔符,行分隔符字符串由系统属性 line.separator 定义
	BufferedWriter bw = new BufferedWriter(new FileWriter("io.txt"));
    for (int i = 0; i < 5; i++) {
        bw.write("i love 杭州");
        bw.newLine();
        bw.flush();
    }
    bw.close();

BufferedReader

从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。

特有方法:

方法名说明
String readLine()读一行文字,不包括任何行终止字符,如果已达到流的末尾,则为 null
	BufferedReader br = new BufferedReader(new FileReader("io.txt"));
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
    br.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aiqian9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值