2014-12-05 7 views
41

Ich habe diese Fehlermeldung geschieht zugegriffen werden, wenn ich eine csv zu lesen bin versucht:Es wurde kein Header-Mapping angegeben, können die Datensatzwerte nicht namentlich (Apache Commons 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) 

Java Ergebnis: 1

Ich benutze Apache Commons CSV-Bibliothek 1.1. Versuchte googeln der Fehlermeldung und das einzige, was ich bekomme, ist die Code-Auflistung 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 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 in meinem src Ordner ist.

Antwort

69

Aufruf withHeader(), um das Standard-Excel CSV-Format für mich gearbeitet:

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

Die Probe wird in der Dokumentation ist nicht ganz klar, aber man kann es here gefunden: Referenzierung Spalten sicher: Wenn Ihre Quelle einen Headersatz enthält, können Sie den Code vereinfachen und sicher auf Spalten verweisen, indem Sie withHeader (String ...) ohne Argumente verwenden: CSVFormat.EXCEL.withHeader();

+6

Das commons csv Benutzerhandbuch Beispiel ist einfach falsch. Über den Kurs für Open-Source-Projekte. https://commons.apache.org/proper/common-csv/user-guide.html – Michael