字符流---FileReader字符读流

字符流专门用户读取存储字符,专门应对文本文件;

什么是字符?

一个汉字是一个字符,一个英文字母也是一个字符;但前后编码一定要一致;


一、FileReader类概述

FileReaderjava.io包中的字符输入流类,用于按字符读取文本文件内容。继承自InputStreamReader,默认使用系统字符编码(如UTF-8)。

FileReader 类在 Java 中是用来读取字符文件的,它默认使用系统的默认编码方式。FileReader 本身并不提供直接指定编码方式的功能。


二、核心方法及使用

1. 构造函数

与字节流大同小异,不对,就是一样的;

方法签名

说明

FileReader(String fileName)

通过文件路径创建

FileReader(File file)

通过File对象创建

示例:

// 方式1:直接通过路径创建
FileReader reader1 = new FileReader("test.txt");

// 方式2:通过File对象创建
File file = new File("data.log");
FileReader reader2 = new FileReader(file);

2. read() 方法

方法签名

返回值

说明

int read()

int

读取单个字符对应的int值,每一个汉字也对应一个数字;即使字符是汉字,它也是一个char类型

int read(char[] cbuf)

读取字符数

将字符读入数组,返回实际读取数量

int read(char[] cbuf, int off, int len)

读取字符数

读取到数组的指定区间

示例1:逐字符读取

FileReader reader = new FileReader("test.txt")
int charCode;
while ((charCode = reader.read()) != -1) {
    char ch = (char) charCode;
    System.out.print(ch);
    }

示例2:块读取(更高效)

char[] buffer = new char[1024];
FileReader reader = new FileReader("largefile.txt")
int charsRead;
while ((charsRead = reader.read(buffer)) != -1) {
    String content = new String(buffer, 0, charsRead);
    System.out.print(content);
}

3. close() 方法

关闭流并释放系统资源,必须调用以防止资源泄漏

三、综合案例:统计文件字符数

public class CharCounter {
    public static void main(String[] args) {
        String fileName = "document.txt";
        int totalChars = 0;

        try (FileReader reader = new FileReader(fileName)) {
            char[] buffer = new char[2048];
            int charsRead;
            
            while ((charsRead = reader.read(buffer)) != -1) {
                totalChars += charsRead;
            }
            
            System.out.println("总字符数: " + totalChars);
        } catch (FileNotFoundException e) {
            System.err.println("文件不存在: " + fileName);
        } catch (IOException e) {
            System.err.println("读取错误: " + e.getMessage());
        }
    }
}

整体学习整理下来,感觉就是,其实无论是字节流还是字符流好像没有这么复杂,他的用法和逻辑很简单,之前我觉得复杂是因为感觉流有很多种不好记,但经过整理,其实核心的流只有字节流的俩和字符流的俩,其他的都是为了应对不同场合对他们进行的包装,属于二次流,而且使用的逻辑也完全一样,以后适合用什么直接查就可以了,整体得到梳理之后一切也没那么可怕!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值