在Java中如何读取和写入文本文件

在Java中如何读取和写入文本文件
最新回答
风软一江水

2026-10-24 16:36:46

在Java中读取和写入文本文件,可根据文件大小和场景选择合适方法,核心是使用java.nio.file包中的工具类,以下是具体实现方式:

一、快速读写小文件(推荐)

使用Files类的静态方法,适合处理小文件(如配置文件、日志片段),支持显式指定UTF-8编码,避免乱码。

  • 读取文件:使用Files.readAllLines()将文件每行作为字符串存入List,若需指定编码(如UTF-8),需传入StandardCharsets.UTF_8参数。

    import java.nio.file.*;import java.util.*;import java.nio.charset.StandardCharsets;List<String> lines = Files.readAllLines(Paths.get("data.txt"), StandardCharsets.UTF_8);
  • 写入文件:使用Files.write()将字符串列表写入文件,默认覆盖原文件。若需追加内容,需添加StandardOpenOption.APPEND选项。

    import java.nio.file.*;import java.util.*;import java.nio.charset.StandardCharsets;List<String> output = Arrays.asList("第一行", "第二行");Files.write(Paths.get("output.txt"), output, StandardCharsets.UTF_8); // 覆盖写入Files.write(Paths.get("output.txt"), output, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND); // 追加写入
二、逐行处理大文件(高效内存管理)

当文件较大时(如日志文件、数据集),需避免一次性加载全部内容,改用BufferedReader和BufferedWriter逐行处理,配合try-with-resources确保资源自动释放。

  • 逐行读取大文件:使用Files.newBufferedReader()创建BufferedReader,通过循环逐行读取,内存占用低。

    import java.nio.file.*;import java.io.*;try (BufferedReader reader = Files.newBufferedReader(Paths.get("large.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); // 处理每一行 }} catch (IOException e) { e.printStackTrace();}
  • 逐行写入大文件:使用Files.newBufferedWriter()创建BufferedWriter,通过write()和newLine()方法写入内容,效率高于直接调用Files.write()。

    import java.nio.file.*;import java.io.*;try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("result.txt"))) { writer.write("这是第一行"); writer.newLine(); // 自动使用系统换行符 writer.write("这是第二行");} catch (IOException e) { e.printStackTrace();}
三、关键注意事项
  • 编码问题:始终显式指定UTF-8编码(如StandardCharsets.UTF_8),避免因平台默认编码不同导致乱码。
  • 资源释放:使用try-with-resources语法(如try (BufferedReader reader = ...))确保流自动关闭,防止资源泄漏。
  • 文件选项:写入时若需追加内容,需添加StandardOpenOption.APPEND;若文件不存在,可添加StandardOpenOption.CREATE。
四、方法选择建议
  • 小文件:优先使用Files.readAllLines()和Files.write(),代码简洁高效。
  • 大文件:使用BufferedReader和BufferedWriter逐行处理,避免内存溢出。
  • 编码控制:无论方法如何,均需显式指定UTF-8编码,确保跨平台兼容性。

通过合理选择方法,可高效、安全地完成Java中的文本文件读写操作。