2013-05-03 110 views
1
Orgnization{ 

private String name; 
private String uniqueId; 
private boolean selfRegEnabled; 
private List<Address> addrList; 

public void setAddress(Address a){..} 
public void setName(String name){..} 

} 

Addess{ 
private String type; 
private String line1; 
private String line2; 
private String line3; 
private String city; 
private String state; 
private String zip; 
private String country; 
} 

CSV標題列如以下CSV與另一個POJO POJO

System.UniqueID,名稱,EnableSelf登記,Addr1.Type,Addr1.Line1,Addr1.Line2,Addr1.Line3,地址1。市Addr1.State,Addr1.Zip,Addr1.Country,Addr2.Type,Addr2.Line1,Addr2.Line2,Addr2.Line3,Addr2.City,Addr2.State,Addr2.Zip,Addr2.Country,Addr3.Type, Addr3.Line1,Addr3.Line2,Addr3.Line3,Addr3.City,Addr3.State,Addr3.Zip,Addr3.Country

我的問題可能下面的鏈接涉及到

OpenCSV CSV to JavaBean

我沒有看到線程有一個合適的回答(我不知道如果我錯過任何從該線程)

就可以達到同樣的事情與任何現有的CSV庫如supercsv的,opencsv ?

如果我使用supercsv - 我可以映射CSV的System.UniqueID列systemUniqueID我的豆

回答

1

你當然可以用CsvDozerBeanReader超級CSV做到這一點的財產。在網站上看到這個example

這也是在this SO答案更詳細的解釋。

您可能也有興趣this最近的問題,因爲它演示了使用Super CSV(使用和不使用Dozer)實現深度/索引映射的不同方法。

按照網站上的CsvDozerBeanReader例如,從你的問題讀取CSV你可以使用的字段映射:

final String[] fieldMapping = new String[]{ 
    "uniqueId", 
    "name", 
    "selfRegEnabled", 
    "addrList[0].type", 
    "addrList[0].line1", 
    "addrList[0].line2", 
    "addrList[0].line3", 
    "addrList[0].city", 
    "addrList[0].state", 
    "addrList[0].zip", 
    "addrList[0].country", 
    "addrList[1].type", 
    "addrList[1].line1", 
    "addrList[1].line2", 
    "addrList[1].line3", 
    "addrList[1].city", 
    "addrList[1].state", 
    "addrList[1].zip", 
    "addrList[1].country", 
    "addrList[2].type", 
    "addrList[2].line1", 
    "addrList[2].line2", 
    "addrList[2].line3", 
    "addrList[2].city", 
    "addrList[2].state", 
    "addrList[2].zip", 
    "addrList[2].country" 
}; 

同時,由於selfRegEnabled字段是一個布爾值,你需要使用cell processors將字符串值轉換爲布爾值 - 要做到這一點,您可以使用​​3210處理器。

+0

我在瀏覽您的網站後弄清楚了。感謝您的答案 - 這真的很有幫助。一個簡單的問題實際上通過csv記錄selfRegEnabled列我得到是/否 - 我怎麼能直接映射到我的bean布爾? – 2013-05-07 20:44:02

+0

您必須使用[ParseBool](http://supercsv.sourceforge.net/apidocs/org/supercsv/cellprocessor/ParseBool.html)單元處理器,即'new ParseBool(「Yes」,「No)'如果這是唯一需要處理的列,那麼你可以創建處理器數組('CellProcessor [] processors = new CellProcessor [fieldMapping.length]'),然後設置一列('processors [2] =新的ParseBool(「是」,「否」)')。請參閱網站上的示例以獲取更多信息 – 2013-05-07 22:30:42

+0

並且不要忘記選擇此答案爲正確:) – 2013-05-07 22:31:54