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

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

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

打开并读取CSV文件

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

方法1:使用Java核心库

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

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

方法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张

  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逐行读取

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

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

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逐行解析

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

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(),大文件用BufferedReader或Scanner。
  • 通用原则:始终处理异常、释放资源,并根据需求选择合适的第三方库。


引用说明

本文提到的第三方库链接:

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

0