Java 为什么在读取.csv文件时会出现ArrayIndexOutOfBoundsException?

Java 为什么在读取.csv文件时会出现ArrayIndexOutOfBoundsException?,java,csv,apache-commons,opencsv,Java,Csv,Apache Commons,Opencsv,我正在尝试读取.csv文件,如下所示: BufferedReader reader = Files.newBufferedReader(Paths.get("przedmioty.csv")); CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT.withHeader("Name", "Teacher", "Years").withIgnoreHeaderCase().withTrim()); for (CSVRecor

我正在尝试读取.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)

我使用ApacheCommonsCSV。

我尝试了以下代码,它对我来说运行良好。你也可以查一下。我使用的是通用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");
    }
  }
}
import org.apache.commons.csv.CSVFormat;
导入org.apache.commons.csv.CSVRecord;
导入java.io.FileReader;
导入java.io.Reader;
公共类Test2{
公共静态void main(字符串[]args)引发异常{
读者在=
新文件阅读器(
“przedmioty.csv”);
可编辑记录=
CSVFormat.TDF
.withRecordSeparator(“\r\n”)
.withFirstRecordAsHeader()
.withHeader(“姓名”、“教师”、“年”)
.WithingnoreHeaderCase()
.parse(in);
用于(CSVRecord CSVRecord:记录){
String name=csvRecord.get(1);
//按列标题名称访问值
字符串Teacher=csvRecord.get(2);
字符串年份=csvRecord.get(3);
//打印记录
System.out.println(“记录编号->”+csvRecord.getRecordNumber());
System.out.println(“名称:”+Name);
System.out.println(“教师:+Teacher”);
系统输出打印(“年:+年”);
System.out.println(“\n\n”);
}
}
}
您提到的选项卡分隔CSV文件存在一些问题。 我在下面提供了github链接,以便您可以运行和测试,它在testdata文件夹中还有一个csv文件。这是一个基于maven的项目


希望它能解决您的问题。

是.csv文件的文字字符内容吗?我没有看到任何逗号,这让我觉得它可能是制表符分隔的,而不是逗号分隔的。@EvanVanderZee是的,它是制表符分隔的。我正在使用excel,所以它是“如何在excel中不另存为.txt,另存为.csv。我已经用逗号分隔的文件进行了测试,如果它不适用于其他csv,请让我知道,以便我可以帮助您。事实上,我仍然在线程“main”java.lang.ArrayIndexOutOfBoundsException:1在org.apache.commons.csv.CSVRecord.get(CSVRecord.java:79)在main.Task01.main(Task01.java:301)中遇到异常。您检查了我提供的代码了吗?我用逗号分隔的csv文件进行了测试?你有不同类型的csv文件吗?由于某种原因,我的.csv是分开的,因为我正在使用excel。你现在可以试试,我已经提供了所有详细信息。