当前位置:首页 > 后端开发 > 正文

java怎么使用txt文件

Ja va中,可通过FileReader、BufferedReader逐行读取txt文件;或用Files.readAllLines()一次性读取所有行到List中,先创建File对象指定路径,再选合适方式读数据

核心实现方式

传统IO流组合(FileReader + BufferedReader)

这是最基础且高效的逐行读取方案,适合处理大文件或需要精确控制内存的场景,关键步骤如下:

  • 创建文件对象:通过new File("路径")定位目标文件;
  • 封装缓冲读取器:用BufferedReader包裹FileReader以提升性能;
  • 循环读取行数据:利用readLine()方法逐行获取内容,直至返回null表示结束。 import java.io.; public class BasicReadExample { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); // 处理每一行的逻辑 } } catch (IOException e) { e.printStackTrace(); } } }

    优势:低内存占用、兼容旧版JDK;

    注意:需手动关闭资源(推荐使用try-with-resources语法自动管理)。

NIO一次性加载(Files.readAllLines())

Java 8引入的简洁方案,直接将全部内容存入List<String>,适用于小型文本文件。

import java.nio.file.; import java.util.List; public class NioReadExample { public static void main(String[] args) throws Exception { List<String> lines = Files.readAllLines(Paths.get("data.txt")); lines.forEach(System.out::println); // 遍历打印所有行 } }

特点:代码量少但会一次性加载整个文件到内存,慎用于超大文件!

Apache Commons IO工具库

若项目允许第三方依赖,可借助FileUtils实现一行代码完成读写:

import org.apache.commons.io.FileUtils; import java.util.List; public class CommonsIoExample { public static void main(String[] args) throws Exception { List<String> content = FileUtils.readLines(new File("data.txt"), "UTF-8"); content.forEach(System.out::println); } }

适用场景:快速开发时优先选择,但需添加Maven坐标commons-io:commons-io:1.4。

java怎么使用txt文件 第1张

写入TXT文件的实践

与读取相对应,写出操作同样分为多种模式:

| 方法 | 示例代码 | 适用场景 |

|———————–|————————————————————————–|————————|

| FileWriter基础写入 | new FileWriter("output.txt").write("Hello World"); | 单次覆盖式写入 |

| BufferedWriter优化版| 结合缓冲区批量提交数据,减少磁盘I/O次数 | 高频次小批量写入 |

| PrintWriter格式化输出| 支持类似控制台打印的便捷语法,如pw.println(formattedString) | 混合文本与变量的场景 |

典型示例——带缓冲区的追加模式写入:

try (BufferedWriter bw = new BufferedWriter(new FileWriter("log.txt", true))) { bw.write("New entry at " + new Date()); bw.newLine(); // 自动添加换行符 } catch (IOException e) { /异常处理/ }

技巧:构造函数第二个参数设为true可开启追加模式而非覆盖原有内容。


异常处理最佳实践

所有IO操作均可能抛出IOException及其子类,建议遵循以下原则:

java怎么使用txt文件 第2张

  1. 分层捕获异常:区分“文件不存在”“权限不足”等具体错误类型;
  2. 资源自动释放:始终使用try-with-resources结构确保流被正确关闭;
  3. 编码规范:指定字符集(如UTF-8)避免乱码问题,特别是在跨平台环境中。

示例防御性编程:

File file = new File("config.txt"); if (!file.exists()) { System.err.println("目标文件不存在!"); return; } try (FileReader fr = new FileReader(file, StandardCharsets.UTF_8)) { /.../ } catch (UnsupportedEncodingException e) { /降级处理方案/ }


性能对比与选型建议

指标 FileReader+BufferedReader Files.readAllLines() Apache Commons IO
内存效率 ⭐⭐⭐⭐⭐(逐行加载) ⭐(全量载入内存) ⭐⭐⭐(内部优化缓冲区)
开发效率 中等 极高
功能扩展性 支持复杂逻辑干预 仅限简单读取 丰富工具类支持
推荐用途 大文件/流式处理 小文件快速解析 企业级项目通用方案


相关问答FAQs

Q1: 遇到乱码怎么办?

解决方案:显式指定编码格式,

  • 读取时:new FileReader("file.txt", StandardCharsets.UTF_8)
  • 写入时:new FileWriter("file.txt", StandardCharsets.GBK)

    避免依赖系统默认编码导致跨平台不一致问题。

Q2: 如何判断文件是否成功打开?

可通过元数据校验:

File file = new File("test.txt"); if (file.canRead()) { System.out.println("可读权限正常"); } else { System.err.println("无读取权限!"); }

结合exists()和`isFile

java怎么使用txt文件 第3张

0