java怎么使用txt文件

java怎么使用txt文件

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

优惠价格:¥ 0.00
当前位置:首页 > 后端开发 > java怎么使用txt文件
详情介绍
Java中,可通过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


写入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及其子类,建议遵循以下原则:

  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

0