Java中如何高效读取CSV与TXT文件?实用技巧解析

在Java中可使用FileReader、BufferedReader或Scanner类读取txt文件,通过逐行解析处理,对于csv文件,可用第三方库如Apache Commons CSV或OpenCSV高效解析,也可手动拆分逗号分隔值,注意处理文件路径、异常捕获及特殊字符转义问题。

打开并读取CSV文件

CSV(逗号分隔值)文件以纯文本形式存储表格数据,每行代表一条记录,字段间用特定分隔符(如逗号、分号)分隔,以下是几种常用的读取方法:

Java中如何高效读取CSV与TXT文件?实用技巧解析

方法1:使用Java核心库

Java内置的BufferedReaderString.split()方法可以简单处理CSV文件,适合格式规范且无复杂转义字符的场景。

try (BufferedReader br = new BufferedReader(new FileReader("data.csv"))) {
    String line;
    while ((line = br.readLine()) != null) {
        String[] fields = line.split(","); // 按逗号分割字段
        System.out.println(Arrays.toString(fields));
    }
} catch (IOException e) {
    e.printStackTrace();
}

注意点:若字段内容包含逗号或换行符,需手动处理转义,此方法可能不适用。

方法2:使用Apache Commons CSV

Apache Commons CSV是第三方库,提供对复杂CSV格式的完整支持(如引号、多行字段)。

  1. 添加Maven依赖:
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-csv</artifactId>
        <version>1.10.0</version>
    </dependency>
  2. 读取代码:
    try (Reader reader = Files.newBufferedReader(Paths.get("data.csv"));
      CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT)) {
     for (CSVRecord record : parser) {
         String name = record.get(0); // 按列索引获取值
         String age = record.get("Age"); // 按列名获取值(需表头)
         System.out.println(name + ": " + age);
     }
    } catch (IOException e) {
     e.printStackTrace();
    }

方法3:使用OpenCSV

OpenCSV是另一流行的CSV解析库,支持注解绑定对象。

Java中如何高效读取CSV与TXT文件?实用技巧解析

  1. 添加Maven依赖:
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>5.8</version>
    </dependency>
  2. 读取为对象列表:
    try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
     List<String[]> allData = reader.readAll();
     for (String[] row : allData) {
         System.out.println(Arrays.toString(row));
     }
    } catch (IOException | CsvException e) {
     e.printStackTrace();
    }

打开并读取TXT文件

TXT文件是纯文本格式,通常按行存储数据,以下是几种读取方式:

方法1:使用BufferedReader逐行读取

适合大文件,避免一次性加载内存。

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();
}

方法2:使用Files类快速读取

Java 7+的Files类提供简洁API,适合小文件。

try {
    List<String> lines = Files.readAllLines(Paths.get("data.txt"));
    lines.forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}

方法3:使用Scanner逐行解析

支持按正则表达式或分隔符处理内容。

Java中如何高效读取CSV与TXT文件?实用技巧解析

try (Scanner scanner = new Scanner(new File("data.txt"))) {
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        System.out.println(line);
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

关键注意事项

  1. 异常处理:始终使用try-with-resources确保文件流自动关闭,避免资源泄漏。
  2. 文件路径:建议使用绝对路径或正确配置相对路径(相对于项目根目录)。
  3. 字符编码:明确指定编码(如UTF-8)以避免乱码:
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("data.csv"), StandardCharsets.UTF_8));
  4. 性能优化:大文件优先使用流式读取(如BufferedReader),而非一次性加载到内存。

  • CSV文件:简单场景用String.split(),复杂场景推荐Apache Commons CSV或OpenCSV。
  • TXT文件:小文件用Files.readAllLines(),大文件用BufferedReaderScanner
  • 通用原则:始终处理异常、释放资源,并根据需求选择合适的第三方库。

引用说明
本文提到的第三方库链接:

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/7076.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年5月29日 23:23
下一篇 2025年5月29日 23:29

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN