java基础之--IO+字符流详解

当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为 一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件

1. 字符输出流Reader

java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法

  • public void close() : 关闭此流并释放与此流相关联的任何系统资源
  • public int read() : 从输入流读取一个字符
  • public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中

1.1 FileReader类

java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区

  • 字符编码:字节与字符的对应规则。Windows系统的中文编码默认是GBK编码表。 idea中UTF-8
  • 字节缓冲区:一个字节数组,用来临时存储字节数据

构造方法:

  • FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象
  • FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称。 当你创建一个流对象时,必须传入一个文件路径。类似于FileInputStream
package FileStream;

import java.io.FileReader;

/**
 * @Description
 * @auther 宁宁小可爱
 * @create 2020-01-14 15:43
 */
public class FRRead {
    public static void main(String[] args) throws Exception {
        /* 此处创建对象也可以创建file对象 */
        FileReader fr  = new FileReader("test.txt");
        /* 循环读取不使用数组接受 */
        int b;
        while ((b = fr.read()) != -1){
            System.out.println((char)b);
        }

        
        /* 定义字符数组,装字节*/
        FileReader fr1  = new FileReader("test.txt");
        char[] cbuf = new char[2];

        while ((b = fr1.read(cbuf)) != -1){
            System.out.println(new String(cbuf));
        }
        fr.close();
        fr1.close();
    }
}

2. 字符输出流Writer

java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节 输出流的基本共性功能方法

  • public abstract void close() : 关闭此输出流并释放与此流相关联的任何系统资源
  • public abstract void flush() : 刷新此输出流并强制任何缓冲的输出字符被写出
  • public void write(int c) : 写出一个字符
  • public void write(char[] cbuf) : 将 b.length字符从指定的字符数组写出此输出流
  • public abstract void write(char[] b, int off, int len) : 从指定的字符数组写出 len字符,从偏移量 off开始输出到此输出流
  • public void write(String str) : 写出一个字符串
  • public write(String str, int off, int len) : 写出一个字符串的一部分

2.1 FileWriter类

java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区

构造方法:

  • FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象
  • FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称
package FileStream;

import java.io.FileWriter;
import java.io.IOException;

/**
 * @Description
 * @auther 宁宁小可爱
 * @create 2020-01-14 17:24
 */
public class FWWrite {
    public static void main(String[] args) throws Exception {
        FileWriter fw = new FileWriter("fw.txt");

        // 写入一个字符
        fw.write( 97);
        // 刷新缓冲区 写入文件
        fw.flush();
        fw.write("b");
        fw.write("c");
        /* 写入换行符 特殊字符 */
        fw.write("\r\n");

        /* 分段写入 */
        char[] chars = "宁宁小可爱".toCharArray();
        fw.write(chars,0,chars.length);

        /* 关闭资源 不关闭资源数据只存在缓冲区中, 并不会写入到文件*/
        fw.close();
    }
}

  • 字符流,只能操作文本文件,不能操作图片,视频等非文本文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叫我三胖哥哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值