webentwicklung-frage-antwort-db.com.de

Es wurde keine Headerzuordnung angegeben. Auf die Datensatzwerte kann nicht über den Namen zugegriffen werden (Apache Commons CSV).

Ich habe diese Fehlermeldung erhalten, wenn ich versuche, eine CSV zu lesen:

Exception in thread "main" Java.lang.IllegalStateException: No header mapping was specified, the record values can't be accessed by name
at org.Apache.commons.csv.CSVRecord.get(CSVRecord.Java:99)
at mockdata.MockData.main(MockData.Java:33)

Java Ergebnis: 1

Ich verwende die Apache Commons CSV-Bibliothek 1.1. Ich habe versucht, die Fehlermeldung zu googeln, und das einzige, was ich bekomme, ist die Codeauflistung auf Websites wie grepcode.

Hier ist mein Code:

package mockdata;

import Java.io.FileInputStream;
import Java.io.FileNotFoundException;
import Java.io.IOException;
import Java.io.InputStreamReader;
import Java.io.Reader;
import org.Apache.commons.csv.CSVFormat;
import org.Apache.commons.csv.CSVRecord;

public class MockData
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException, IOException
    {
        Reader in = new InputStreamReader(MockData.class.getClassLoader()
                                .getResourceAsStream("MOCK_DATA.csv"), "UTF-8");
        Iterable<CSVRecord> records = CSVFormat.Excel.parse(in);
        for (CSVRecord record : records) 
        {
            String lastName = record.get("last_name");
            String firstName = record.get("first_name");

            System.out.println("firstName: " + firstName + " lastName: " + lastName);
        }
    }

}

Der Inhalt von CSV:

first_name,last_name,address1,city,state,Zip,country,phone,email
Robin,Lee,668 Kinsman Road,Hagerstown,TX,94913,United States,5-(078)623-0713,[email protected]
Bobby,Moreno,68 Dorton Avenue,Reno,AZ,79934,United States,5-(080)410-6743,[email protected]
Eugene,Alexander,3 Bunker Hill Court,Newark,MS,30066,United States,5-(822)147-6867,[email protected]
Katherine,Crawford,3557 Caliangt Avenue,New Orleans,OR,23289,United States,2-(686)178-7222,[email protected]

Es befindet sich in meinem src-Ordner.

49
Creature

Das Aufrufen von withHeader () im Standard-Excel-CSV-Format hat bei mir funktioniert:

CSVFormat.Excel.withHeader().parse(in);

Das Beispiel in der Dokumentation ist nicht sehr klar, aber Sie finden es hier : Spalten sicher referenzieren: Wenn Ihre Quelle einen Header-Datensatz enthält, können Sie Ihren Code vereinfachen und sicher auf Spalten verweisen, indem Sie withHeader (String ...) ohne Argumente verwenden: CSVFormat.Excel.withHeader () ;

78
fcuesta