2013-05-03 2 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 en-tête Les colonnes sont comme ci-dessouscsv à POJO avec un autre POJO

System.UniqueID, Nom, EnableSelf-inscription, Addr1.Type, Addr1.Line1, Addr1.Line2, Addr1.Line3, Addr1. Ville, 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

Ma question pourrait être liée à lien ci-dessous

OpenCSV CSV to JavaBean

Je ne vois pas que le fil a une réponse correcte (je ne suis pas sûr si je manque tout de ce fil)

Pouvons-nous réaliser même chose avec l'une des bibliothèques csv existantes telles que supercsv, opencsv ?

Si j'utilise supercsv - puis-je la carte colonne System.UniqueID de csv à systemUniqueID propriété de mon haricot

Répondre

1

Vous pouvez certainement le faire avec l'aide de Super CSV CsvDozerBeanReader. Voir ce example sur le site Web.

Il est également expliqué plus en détail sur this SO réponse.

this Vous pouvez également être intéressé par this question récente, car elle démontre les différentes façons d'obtenir un mappage profond/indexé avec Super CSV (avec et sans Dozer).

Suivant l'exemple CsvDozerBeanReader sur le site, lire le CSV de votre question que vous utiliseriez une cartographie sur le terrain de:

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

En outre, parce que le champ selfRegEnabled est un booléen, vous devez utiliser cell processors pour transformer la valeur String en une valeur booléenne - pour ce faire, vous utiliserez le processeur ParseBool.

+0

J'ai bien compris après avoir parcouru votre site. Merci pour la réponse - c'était vraiment utile. une question rapide en réalité grâce à l'enregistrement csv pour la colonne selfRegEnabled Je reçois Oui/Non - comment puis-je mapper directement à boolean dans mon bean? –

+0

Vous devrez utiliser le processeur de cellule [ParseBool] (http://supercsv.sourceforge.net/apidocs/org/supercsv/cellprocessor/ParseBool.html), c'est-à-dire 'nouveau ParseBool (" Oui "," Non ") Si c'est la seule colonne qui nécessite un traitement, vous pouvez simplement créer le tableau de processeurs ('CellProcessor [] processors = new CellProcessor [fieldMapping.length] '), puis configurer cette colonne (' processors [2] = nouveau ParseBool ("Oui", "Non") '). Voir les exemples sur le site Web pour plus d'informations –

+0

Et n'oubliez pas de sélectionner cette réponse comme correcte :) –