java - 为什么在读取 .csv 文件时出现 ArrayIndexOutOfBoundsException?
问题描述
我正在尝试读取 .csv 文件,如下所示:
BufferedReader reader = Files.newBufferedReader(Paths.get("przedmioty.csv"));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT.withHeader("Name", "Teacher", "Years").withIgnoreHeaderCase().withTrim());
for (CSVRecord csvRecord: csvParser) {
// Accessing Values by Column Index
String name = csvRecord.get(0);
//Accessing the values by column header name
String Teacher= csvRecord.get(1);
String years = csvRecord.get(2);
//Printing the record
System.out.println("Record Number - " + csvRecord.getRecordNumber());
System.out.println("Name: " + name);
System.out.println("Teacher: " + Teacher);
System.out.print("Years : " + years );
System.out.println("\n\n");
}
这就是我的 .csv 的样子
Name Teacher Years
Math Leszek Krauze 2
X Grimm Dostojowksi 3
Y Dimitriv Vladiskovic 4
我越来越
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.commons.csv.CSVRecord.get(CSVRecord.java:79)
at main.Task01.main(Task01.java:294)
我使用 apache commons csv。
解决方案
我已尝试使用以下代码,它对我来说工作正常。你也可以检查。我正在使用通用 CSV 版本 1.4。请检查下面的代码。我修改了下面的代码。
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.Reader;
public class Test2 {
public static void main(String[] args) throws Exception {
Reader in =
new FileReader(
"przedmioty.csv");
Iterable<CSVRecord> records =
CSVFormat.TDF
.withRecordSeparator("\r\n")
.withFirstRecordAsHeader()
.withHeader("Name", "Teacher", "Years")
.withIgnoreHeaderCase()
.parse(in);
for (CSVRecord csvRecord : records) {
String name = csvRecord.get(1);
// Accessing the values by column header name
String Teacher = csvRecord.get(2);
String years = csvRecord.get(3);
// Printing the record
System.out.println("Record Number -> " + csvRecord.getRecordNumber());
System.out.println("Name: " + name);
System.out.println("Teacher: " + Teacher);
System.out.print("Years : " + years);
System.out.println("\n\n");
}
}
}
您提到的制表符分隔的 CSV 文件存在一些问题。我在 github 链接下方提供,以便您可以运行和测试,并且它在 testdata 文件夹中还有一个 csv 文件。它是基于 Maven 的项目。
https://github.com/debjava/sample-tab-csv-parser 希望它能解决你的问题。
推荐阅读
- c# - System.Speech.Recognition - 设置 SpeechRecognitionEngine 返回 SAPI 音素而不是 IPA
- javascript - 当我在 Bootstrap 中打开新的折叠时关闭旧的折叠
- python - Google colab "glob.glob" 为什么找不到我的 1456 文件?
- server - nutch 不抓取允许所有爬虫通过 robots.txt 的网站
- ruby-on-rails - 如何确认 Rails 模型中存在附件?
- apache - 带有 Nginx 和 Apache 的 Ubuntu - 访问 Nginx 登录页面的问题
- google-apps-script - 我可以以某种方式强制 onOpen 触发器吗?
- websocket - 用于测试我的代码的在线 WebSocket 服务器
- python - 使用相同的按钮在 tkinter 中选择两个(非连续的)文件
- android - 使用 LoginManager 不工作的 Facebook 登录 - Fragment Android 中的自定义登录按钮