字符流专门用户读取存储字符,专门应对文本文件;
什么是字符?
一个汉字是一个字符,一个英文字母也是一个字符;但前后编码一定要一致;
一、FileReader类概述
FileReader
是java.io
包中的字符输入流类,用于按字符读取文本文件内容。继承自InputStreamReader
,默认使用系统字符编码(如UTF-8)。
FileReader
类在 Java 中是用来读取字符文件的,它默认使用系统的默认编码方式。FileReader
本身并不提供直接指定编码方式的功能。
二、核心方法及使用
1. 构造函数
与字节流大同小异,不对,就是一样的;
方法签名 |
说明 |
|
通过文件路径创建 |
|
通过File对象创建 |
示例:
// 方式1:直接通过路径创建
FileReader reader1 = new FileReader("test.txt");
// 方式2:通过File对象创建
File file = new File("data.log");
FileReader reader2 = new FileReader(file);
2. read() 方法
方法签名 |
返回值 |
说明 |
|
|
读取单个字符对应的int值,每一个汉字也对应一个数字;即使字符是汉字,它也是一个 |
|
读取字符数 |
将字符读入数组,返回实际读取数量 |
|
读取字符数 |
读取到数组的指定区间 |
示例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());
}
}
}
整体学习整理下来,感觉就是,其实无论是字节流还是字符流好像没有这么复杂,他的用法和逻辑很简单,之前我觉得复杂是因为感觉流有很多种不好记,但经过整理,其实核心的流只有字节流的俩和字符流的俩,其他的都是为了应对不同场合对他们进行的包装,属于二次流,而且使用的逻辑也完全一样,以后适合用什么直接查就可以了,整体得到梳理之后一切也没那么可怕!