Java IO:深入理解字符流操作(下)

1 下载量 160 浏览量 更新于2024-08-29 收藏 43KB PDF 举报
"本文主要介绍了Java IO中的字符流,特别是关注于文件操作的字符流——FileReader类。字符流在处理文本数据时尤其有用,因为它能够处理特定编码下的字符,而不是简单的字节序列。" 在Java中,IO流分为字节流和字符流。字符流是基于字节流进行解码的,它会将字节序列转换成与当前系统环境相关的字符。如果字节组合无法找到对应的字符,那么这个数据会被视为无效并忽略。 1.1.1 字符流特征 字符流是由字节流和解码过程组成的。在处理文本文件时,字符流会将字节流中的数据按照指定的字符编码(如UTF-8、GBK等)转换为字符。如果某个字节序列在当前编码集中找不到对应的字符,那么这个字节序列会被认为无效,不会被转换为字符,从而可能导致数据丢失。 1.1.2 文件操作输入字符流 `FileReader` `FileReader` 是Java中的一个类,用于读取字符文件。它继承自抽象类 `Reader`,并实现了字符输入流的基本操作。 - 构造方法: - `FileReader(File file)`:使用给定的 `File` 对象来创建一个新的 `FileReader` 实例,准备从该文件读取字符。 - `FileReader(String pathName)`:根据提供的字符串路径创建一个 `FileReader` 实例。如果指定的文件不存在,会抛出 `FileNotFoundException`。 - 成员方法: - `int read()`:读取单个字符,返回值是一个整数,其中低16位表示字符值。如果已到达文件末尾,返回 `-1`。 - `int read(char[] arr)`:读取文件内容并填充到字符数组 `arr` 中,返回实际读取的字符数量。 - `int read(char[] arr, int off, int length)`:从指定的数组偏移量 `off` 开始,读取最多 `length` 个字符到数组中,返回实际读取的字符数量。 以下是一个 `FileReader` 的使用示例: ```java FileReader fr = null; try { fr = new FileReader("/path/to/your/file.txt"); char[] buf = new char[1024]; // 创建字符缓冲区 int len = -1; while ((len = fr.read(buf)) != -1) { // 循环读取直到文件末尾 String readStr = new String(buf, 0, len); // 将读取的字符数组转换为字符串 System.out.println(readStr); } } catch (IOException e) { e.printStackTrace(); } finally { if (fr != null) { try { fr.close(); // 关闭文件流 } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个例子中,我们创建了一个 `FileReader` 对象来打开指定的文件,然后使用 `read()` 方法读取文件内容,并将其打印出来。最后,确保文件流被正确关闭,防止资源泄漏。 字符流在处理文本文件时,能够更好地保持字符编码的完整性,避免因为字节流直接处理导致的乱码问题。然而,对于二进制文件(如图片、音频文件等),应使用字节流进行操作,因为它们不涉及字符编码。