web-dev-qa-db-fra.com

Aucun mappage d'en-tête n'a été spécifié, les valeurs d'enregistrement ne sont pas accessibles par nom (Apache Commons CSV)

J'ai reçu ce message d'erreur lorsque j'essaie de lire un csv:

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)

Résultat Java: 1

J'utilise la bibliothèque Apache Commons CSV 1.1. J'ai essayé de googler le message d'erreur et la seule chose que j'obtiens est la liste de code sur des sites comme grepcode.

Voici mon 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);
        }
    }

}

Le contenu de 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]

Il se trouve dans mon dossier src.

49
Creature

Appeler withHeader () au format CSV Excel par défaut a fonctionné pour moi:

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

L'exemple dans la documentation n'est pas très clair, mais vous pouvez le trouver ici : Référencement des colonnes en toute sécurité: Si votre source contient un enregistrement d'en-tête, vous pouvez simplifier votre code et référencer les colonnes en toute sécurité, en utilisant withHeader (String ...) sans arguments: CSVFormat.Excel.withHeader () ;

78
fcuesta