57

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 結果: 1

Apache Commons CSV ライブラリ 1.1 を使用しています。エラー メッセージをグーグルで調べてみましたが、grepcode などのサイトにリストされているコードだけが表示されます。

これが私のコードです:

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

}

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,rlee0@e-recht24.de
Bobby,Moreno,68 Dorton Avenue,Reno,AZ,79934,United States,5-(080)410-6743,bmoreno1@ihg.com
Eugene,Alexander,3 Bunker Hill Court,Newark,MS,30066,United States,5-(822)147-6867,ealexander2@gmpg.org
Katherine,Crawford,3557 Caliangt Avenue,New Orleans,OR,23289,United States,2-(686)178-7222,kcrawford3@symantec.com

それは私の src フォルダーにあります。

4

4 に答える 4

88

withHeader() をデフォルトの Excel CSV 形式に呼び出すと、うまくいきました。

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

ドキュメントのサンプルはあまり明確ではありませんが、ここで見つけることができます : 列を安全に参照する: ソースにヘッダー レコードが含まれている場合、 withHeader(String...) を no で使用することにより、コードを簡素化し、列を安全に参照できます。引数: CSVFormat.EXCEL.withHeader();

于 2014-12-12T16:30:19.493 に答える