本文介绍使用BufferedReader高效、安全地逐行读取CSV文本文件,并将每一行作为字符串存入ArrayList,同时规避Scanner.nextLine()可能引发的异常问题,为后续按行解析(如Token统计)提供可靠数据基础。
本文介绍使用bufferedreader高效、安全地逐行读取csv文本文件,并将每一行作为字符串存入arraylist
在Java中读取CSV文件时,直接使用Scanner.nextLine()配合手动异常控制(如捕获NoSuchElementException或NullPointerException)不仅逻辑冗余,还容易因资源未关闭或边界判断失误导致程序不稳定。更推荐的方式是采用BufferedReader——它专为高效字符流读取设计,支持自动资源管理(try-with-resources),且readLine()返回null即明确标识文件结束,语义清晰、健壮性强。
以下是标准实现方式:
import java.io.*;
import java.util.*;
public static List<string> readCsvLines(String filePath) {
List<string> lines = new ArrayList();
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
lines.add(line.trim()); // 可选:去除首尾空白,提升后续解析鲁棒性
}
} catch (FileNotFoundException e) {
System.err.println("错误:指定CSV文件未找到 — " + filePath);
throw new RuntimeException(e);
} catch (IOException e) {
System.err.println("错误:读取文件时发生I/O异常");
throw new RuntimeException(e);
}
return lines;
}</string></string>
调用该方法后,即可将结果传入您的getTokens()方法进行进一步处理:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
public static void main(String[] args) {
String csvPath = "visadata.csv";
List<string> csvLines = readCsvLines(csvPath);
System.out.println("共加载 " + csvLines.size() + " 行交易记录");
// 传入每行数据进行Token分析(例如统计debit/credit)
getTokens(csvLines); // 注意:请确保getTokens(List<string>)已重载或修改为接收List参数
}</string></string>
⚠️ 注意事项:
- 避免使用StringTokenizer:该类已过时(deprecated),官方推荐使用String.split()或Scanner(针对单行);若需按逗号解析字段,请注意CSV中可能存在带引号的逗号(如 "Smith, John","2023-05-01",150.00),此时应使用专业CSV库(如Apache Commons CSV或OpenCSV)以保证正确性;
- 编码问题:若CSV含中文或特殊字符,请显式指定编码(如new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
- 内存考量:对超大CSV文件(GB级),不建议全量加载进ArrayList,应考虑流式逐行处理;
- 空行与注释:实际业务中可增加过滤逻辑,例如跳过空行或以#开头的注释行:if (line == null || line.trim().isEmpty() || line.trim().startsWith("#")) continue;
综上,BufferedReader + try-with-resources是读取CSV行数据的简洁、安全、符合现代Java实践的标准方案,既为后续令牌分析奠定坚实基础,也显著提升代码可维护性与健壮性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










