使用OpenCSV的CSVReader读取CSV时出现报错,请求技术协助
解决OpenCSV读取CSV到数组的报错问题
先梳理下你代码里的几个核心问题,这些大概率是导致报错的直接原因:
1. 文件路径的转义错误
Java字符串里的反斜杠\是特殊转义字符,你写的"C:\Users\Documents\o.csv"会直接触发编译报错——因为\U、\D这类不是合法的转义序列,必须把路径里的反斜杠改成双反斜杠\\,或者直接用正斜杠/代替。
2. 语法低级错误
你的main方法里多了一对多余的大括号{,而且CSVReader实例化时把参数reader写成了reade...,这属于明显的拼写/语法失误,会导致代码无法正常编译运行。
3. CSV分隔符的潜在适配问题
你给出的CSV数据示例是1123, may4, 0021;3323;,这里同时出现了逗号和分号。如果默认用逗号作为分隔符,第三列的0021;3323;会被当成一个整体;如果你的实际需求是分号也要作为字段分隔符,那需要手动指定分隔符规则。
修正后的完整可运行代码
import com.opencsv.CSVReader; import java.io.IOException; import java.io.Reader; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; public class CsvToArrayHandler { // 修正路径转义问题,两种写法二选一都可以 private static final String SAMPLE_CSV = "C:\\Users\\Documents\\o.csv"; // private static final String SAMPLE_CSV = "C:/Users/Documents/o.csv"; public static void main(String[] args) { // 用try-with-resources自动关闭资源,避免泄漏 try (Reader reader = Files.newBufferedReader(Paths.get(SAMPLE_CSV)); CSVReader csvReader = new CSVReader(reader)) { // 读取所有行到数组集合,每一行对应一个String数组 List<String[]> allCsvRows = csvReader.readAll(); // 遍历验证结果 for (String[] row : allCsvRows) { System.out.printf("Date: %s, Sold: %s, Code: %s%n", row[0], row[1], row[2]); } } catch (Exception e) { // 打印异常堆栈,方便精准定位报错原因 e.printStackTrace(); } } }
额外优化提示
如果你的CSV实际是用分号作为分隔符(或者需要混合处理逗号+分号),可以用CSVReaderBuilder自定义规则:
CSVReader csvReader = new CSVReaderBuilder(reader) .withSeparator(';') // 指定分号为分隔符 .build();
内容的提问来源于stack exchange,提问作者val
相关产品推荐
相关产品推荐

