Почему я получаю ArrayIndexOutOfBoundsException при чтении файла .csv? - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь прочитать файл .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.

1 Ответ

0 голосов
/ 18 мая 2019

Я попытался с помощью следующего кода, и он работает нормально для меня. Вы также можете проверить. Я использую Common 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, чтобы вы могли запускать и тестировать, и он также имеет файл csv внутри папки testdata. Это основанный на Maven проект.

https://github.com/debjava/sample-tab-csv-parser Надеюсь, это решит вашу проблему.

...