侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

使用Java IO读取文本文件内容并输出

2025-12-9 / 0 评论 / 4 阅读

题目

使用Java IO读取文本文件内容并输出

信息

  • 类型:问答
  • 难度:⭐

考点

文件读取,字节流与字符流,资源关闭

快速回答

使用字符流读取文本文件的标准实现:

  • 优先选择BufferedReader包装FileReader提高效率
  • 必须使用try-with-resources确保资源自动关闭
  • 逐行读取使用readLine()方法
  • 处理IOException异常
## 解析

原理说明

Java IO中读取文本文件需注意:

  1. 字符流 vs 字节流:文本文件应使用字符流(Reader),避免字节流(InputStream)直接处理字符导致的编码问题
  2. 缓冲机制BufferedReader通过内存缓冲减少磁盘I/O次数,显著提升读取效率
  3. 资源释放:未关闭的流会导致资源泄漏,try-with-resources(Java 7+)自动调用close()

代码示例

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadTextFile {
    public static void main(String[] args) {
        // 使用try-with-resources自动关闭资源
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            // 逐行读取直到返回null
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.err.println("读取文件失败: " + e.getMessage());
        }
    }
}

最佳实践

  • 始终使用try-with-resources管理资源,避免手动close()遗漏
  • 大文件读取优先用BufferedReader.readLine(),避免一次性加载内存溢出
  • 指定文件编码(如new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)

常见错误

错误示例后果修正方案
FileReader fr = new FileReader(...);(无缓冲)频繁磁盘I/O,性能低下BufferedReader包装
reader.close()放在finally块但未判空可能抛NullPointerException使用try-with-resources
FileInputStream读取文本中文等非ASCII字符乱码改用字符流Reader

扩展知识

  • NIO替代方案:Java 7+可用Files.readAllLines(Paths.get("file.txt"))快速读取小文件
  • 编码问题FileReader使用系统默认编码,跨平台推荐显式指定编码(如UTF-8)
  • 性能对比BufferedReader比基础FileReader快5-10倍(实测百万行文件)