read poi example commons java csv apache-commons apache-commons-csv

java - poi - No se especificó ningún mapeo de encabezado, no se puede acceder a los valores del registro por nombre(Apache Commons CSV)



csv java (1)

Recibí este mensaje de error cuando trato de leer 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)

Resultado de Java: 1

Estoy usando la biblioteca Apache Commons CSV 1.1. Intenté buscar en Google el mensaje de error y lo único que obtuve es la lista de códigos en sitios como grepcode.

Aquí está mi código:

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

Los contenidos 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]

Está ubicado en mi carpeta src.


Llamar con Header () al formato de Excel CSV predeterminado funcionó para mí:

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

El ejemplo de la documentación no es muy claro, pero puede encontrarlo here : Hacer referencia a las columnas de forma segura: si su fuente contiene un registro de encabezado, puede simplificar su código y hacer referencia de forma segura a las columnas, utilizando withHeader (String ...) sin argumentos: CSVFormat.EXCEL.withHeader ();