Nor*_*rcy 7 java csv apache-commons apache-commons-csv
我正在尝试使用 Apache Commons CSV 将带有某些标题的 CSV 文件读入 Java 对象。但是,当我运行代码时,我得到以下例外:
Exception in thread "main" java.lang.IllegalArgumentException: Mapping for Color not found, expected one of [Color, Name, Price, House Cost, Rent, 1 House, 2 Houses, 3 Houses, 4 Houses, Hotel, Mortgage]
at org.apache.commons.csv.CSVRecord.get(CSVRecord.java:102)
at GameBoard.<init>(GameBoard.java:25)
at Game.main(Game.java:3)
Run Code Online (Sandbox Code Playgroud)
有人可以解释异常的来源吗?在我看来,Apache Commons 以某种方式与我的输入不匹配。是我有什么问题还是其他什么东西坏了?这是我的代码片段:
Reader in;
Iterable<CSVRecord> records = null;
try {
in = new FileReader(new File(Objects.requireNonNull(getClass().getClassLoader().getResource("Properties.csv")).getFile()));
records = CSVFormat.EXCEL.withFirstRecordAsHeader().parse(in);
} catch (IOException | NullPointerException e) {
e.printStackTrace();
System.exit(1);
}
for (CSVRecord record :
records) {
spaces.add(new Property(
record.get("Color"),
record.get("Name"),
Integer.parseInt(record.get("Price")),
Run Code Online (Sandbox Code Playgroud)
这是我的 csv 标题(抱歉,一个被切断了,但这不是重点):

谢谢!
我有同样的问题,只有当您引用第一列时才会发生,所有其他列名称都有效。问题是,UTF-8 表示形式会在前面添加以下字符“0xEF、0xBB、0xBF”(请参阅维基百科页面)。这似乎是 commons-csv 的一个已知问题,但由于这是特定于应用程序的,因此不会被修复(CSVFormat.EXCEL.parse 应处理字节顺序标记)。
但是,有一个记录在案的解决方法:
http://commons.apache.org/proper/commons-csv/user-guide.html#Handling_Byte_Order_Marks
我也遇到了同样奇怪的异常。它实际上说“期待其中一个......”,然后列出它说找不到的字段 - 就像你的情况一样。
原因是我设置了错误的 CSVFormat:
CSVFormat csvFormat = CSVFormat.newFormat(';');
Run Code Online (Sandbox Code Playgroud)
这意味着我的代码试图在实际上有逗号分隔符的文件中用分号分隔字段。
一旦我使用了 DEFAULT CSVFormat,一切就开始工作了。
CSVFormat csvFormat = CSVFormat.DEFAULT;
Run Code Online (Sandbox Code Playgroud)
所以答案是您可能必须为您的文件正确设置 CSVFormat。
| 归档时间: |
|
| 查看次数: |
4520 次 |
| 最近记录: |