2014-12-05 70 views
41

Bu hata mesajı bir csv okumaya çalışıyorum durumlarda neler var:Hiçbir başlık haritalama belirtilirken, kaydı değerleri adıyla erişilemez (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 Sonucu: 1

Apache Commons CSV kütüphanesini kullanıyorum 1.1. Hata mesajını denedim ve aldığım tek şey grepcode gibi sitelerdeki kod listesi. CSV

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

} 

içeriği: Benim src klasörüne

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] 

bulunur

İşte benim kod. Varsayılan Excel CSV formatına withHeader() çağrılması

cevap

69

benim için çalıştı:

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

belgelerinde örnek çok net değil, ama bunu here bulundu edebilirsiniz: Referans sütunları güvenle: Kaynağınız bir üstbilgi kaydı içeriyorsa, kodunuzu sadeleştirebilir ve bağımsız değişkenlerle birlikteHeader (String ...) kullanarak sütunları güvenli bir şekilde referanslayabilirsiniz: CSVFormat.EXCEL.withHeader();

+6

commons csv kullanıcı kılavuzu örneği sadece yanlıştır. Açık kaynak projeleri için kurs hakkında eşit. https://commons.apache.org/proper/commons-csv/user-guide.html – Michael