Java如何读取文件内容
- 后端开发
- 2025-07-06
- 7
在Java中读取文档内容是常见的文件操作任务,适用于日志分析、数据导入或配置文件处理等场景,以下是几种高效可靠的方法,每种方法均附代码示例和适用场景分析,确保代码健壮性(使用try-with-resources自动关闭资源,避免内存泄漏)。
使用 BufferedReader + FileReader(经典文本读取)
适用场景:逐行读取文本文件(如.txt, .csv),适合大文件处理。
优势:内存占用低,通过缓冲区提升读取效率。
使用 Files 类(Java 7+ 推荐)
适用场景:快速读取小文本文件(如配置文件)。
优势:代码简洁,一行完成读取,但会一次性加载整个文件到内存。
import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; import java.util.List; public class ReadFileExample { public static void main(String[] args) { String filePath = "example.txt"; try { // 读取所有行到List List<String> lines = Files.readAllLines(Paths.get(filePath)); for (String line : lines) { System.out.println(line); } // 或直接读取为字符串 String content = new String(Files.readAllBytes(Paths.get(filePath))); System.out.println(content); } catch (IOException e) { System.err.println("文件读取异常: " + e.getMessage()); } } }
使用 Scanner(灵活解析文本)
适用场景:需按分隔符(如空格、逗号)解析内容(如结构化数据)。
优势:支持正则表达式分割,灵活处理复杂格式。
import java.io.File; import java.io.IOException; import java.util.Scanner; public class ReadFileExample { public static void main(String[] args) { File file = new File("example.txt"); try (Scanner scanner = new Scanner(file)) { scanner.useDelimiter(","); // 设置分隔符(例如CSV文件) while (scanner.hasNext()) { String token = scanner.next(); System.out.println(token); // 处理每个字段 } } catch (IOException e) { System.err.println("文件解析错误: " + e.getMessage()); } } }
使用 FileInputStream(二进制文件读取)
适用场景:非文本文件(如图片、PDF、视频)。
优势:直接操作字节流,保留原始数据。

import java.io.FileInputStream; import java.io.IOException; public class ReadFileExample { public static void main(String[] args) { String filePath = "image.png"; try (FileInputStream inputStream = new FileInputStream(filePath)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 处理字节数据(例如保存或转码) processBytes(buffer, bytesRead); } } catch (IOException e) { System.err.println("二进制文件读取失败: " + e.getMessage()); } } private static void processBytes(byte[] buffer, int length) { // 自定义处理逻辑(如写入到其他流) } }
关键注意事项
-
文件编码:
文本文件需注意编码格式(如UTF-8),若出现乱码,指定编码:
-
大文件处理:
避免Files.readAllLines(),改用BufferedReader逐行读取,防止内存溢出。

-
异常处理:
务必捕获IOException,记录错误信息或回退操作。
-
资源释放:
使用 try-with-resources(如try (BufferedReader reader = ...))确保资源自动关闭,防止文件句柄泄漏。
- Java官方文件I/O文档:Oracle Java Files
- try-with-resources语法规范:Java SE 7 try-with-resources
- 字符编码处理指南:Unicode in Java
| 方法 | 适用场景 | 内存占用 | 性能 |
|---|---|---|---|
| BufferedReader | 大文本文件逐行处理 | 低 | 高 |
| Files类 | 小文本文件 | 高 | 快 |
| Scanner | 结构化文本解析 | 中 | 中 |
| FileInputStream | 二进制文件 | 低 | 高 |
提示:根据需求选择方法,优先使用Files类简化代码,大文件场景用BufferedReader,二进制数据用FileInputStream。
权威引用说明
通过以上方法,您可安全高效地处理各类文档,遇到复杂场景时,建议结合Apache Commons IO或Guava等库简化代码(如FileUtils.readFileToString)。
