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,[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]
私のsrcフォルダーにあります。
WithHeader()をデフォルトのExcel CSV形式に呼び出すとうまくいきました:
CSVFormat.Excel.withHeader().parse(in);
ドキュメントのサンプルはあまり明確ではありませんが、見つけることができます here :列を安全に参照する:ソースにヘッダーレコードが含まれている場合、withHeader(String ...)を引数なしで使用することにより、コードを簡素化して安全に列を参照できます:CSVFormat.Excel。 withHeader();