字符流---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());
        }
    }
}

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

### Java字符流的输入输出操作 在 Java 编程语言中,字符流用于处理基于字符的数据传输。`Reader` 和 `Writer` 是两个抽象类,分别代表字符输入字符输出[^1]。 #### 使用 BufferedReader 进行字符输入 为了高效地字符数据,通常会使用带缓冲区的字符输入——`BufferedReader` 类。此工具允许逐行取文本文件的内容: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadExample { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) { String line; while ((line = br.readLine()) != null) { // 取每一行直到结束 System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` 这段代码展示了如何打开并按照行来取名为 "input.txt" 的文件中的内容[^3]。 #### 使用 PrintWriter 进行字符输出 对于写入字符的操作,则可以采用 `PrintWriter` 类,它不仅支持打印各种数据类型的值而且能够自动刷新缓存: ```java import java.io.PrintWriter; import java.io.FileWriter; import java.io.IOException; public class WriteExample { public static void main(String[] args) { try (PrintWriter pw = new PrintWriter(new FileWriter("output.txt"))) { pw.println("Hello, world!"); // 输出字符串至 output.txt 文件 pw.print(42); // 不加换行符直接追加整数 } catch (IOException e) { e.printStackTrace(); } } } ``` 上述例子说明了怎样创建一个新的文本文件 `"output.txt"` 并向其中写入一些简单的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值