2011-06-23 228 views
0

我目前正在研究需要用Java讀取CSV文件的程序。現在我已經正確加載了文件,這不是問題,我想從csv文件中將用戶信息添加到數據庫中。然而它作爲價值清單出現。下面是我的文件格式用Java導入CSV文件

first_name1, last_name1,(group1,group2,group3) 
first_name2, last_name2,(group1,group2,group3) 

所以要在數據庫中添加作爲

firstname1,lastname1,group1 
firstname1,lastname1,group2 
firstname1,lastname1,group1 
firstname2,lastname2,group1 
... 

,所以我應該如何分割這一切,並存儲在數據庫中?

該文件有一系列我想要放入數據庫的記錄,所以如果有人對此有任何想法,請讓我知道。

任何建議將是非常有義務的。

+1

迭代每個組並插入它們?您可以使用正則表達式或標準的string.split來分割令牌,並使用for循環進行迭代。 – Mikola

+0

這非常簡單:使用現有的CSV閱讀器(不是Openbyte中的一個,它不能處理Excel生成的CSV文件)加載文件,逐行讀取它,將每行轉換爲多個數據庫記錄,將每個記錄保存到數據庫中,關閉文件,提交數據庫操作,關閉數據庫連接。 –

+0

@Mikola,Roland lllig:你可以請一些例子來分割csv文件。基本上我想要DTO類的結構。如字符串firstname;字符串姓氏,列表組[];我怎樣才能加入到這個數據庫中? – Raje

回答

1
  • 讀取文件(BufferedFileReader)
  • 遍歷線(for循環)
  • 打破了線到變量(StringTokenizer的)
  • 放在一起查詢(字符串)
  • 對數據庫執行查詢(SQL)

    public void test(String line) { 
        List<String> list = new ArrayList<String>(); 
        StringTokenizer t1 = new StringTokenizer(line, ","); 
        String firstName = (String) t1.nextElement(); 
        String lastName = (String) t1.nextElement(); 
        String temp = (String) t1.nextElement(); 
        temp = temp.replaceAll("(", "").replaceAll(")", ""); 
        List<String> usergroups = new ArrayList<String>(); 
        StringTokenizer t2 = new StringTokenizer(temp, ","); 
        while (t2.hasMoreElements()) { 
         String element = (String) t2.nextElement(); 
         usergroups.add(element); 
        } 
    } 
    
+0

@molske:你可以請一些例子來分割CSV文件。基本上我想要DTO類的結構。如字符串firstname;字符串姓氏,列表組[];我怎樣才能加入到這個數據庫中? – Raje

+0

快速(未經測試)版本以獲取如何處理它的提示 – Molske

+0

@molske:使用的是下列行「列表 list = new ArrayList ();」 – Raje

0

有一個名爲opencsv的圖書館,可爲您完成所有繁重的工作。它會自動處理諸如嵌入逗號問題雙引號值等

Maven的扶養的定義是:

<dependency> 
     <groupId>net.sf.opencsv</groupId> 
     <artifactId>opencsv</artifactId> 
     <version>2.1</version> 
    </dependency> 

我用它,可以推薦它。

+0

感謝這個新的有趣的事情。你能提供更多的細節或例子嗎?基本上我想分配所有這些用戶信息到我的userDTO類。所以我如何創建DTO爲此並將所有這些值分配給userDTO類並存儲到數據庫中 – Raje

0

你應該看看openCSV。他們支持一個javabeans映射,它可以讓你命名列並將其映射到你的DTO中:http://opencsv.sourceforge.net/#javabean-integration 我看到的一個問題是你使用括號的組嵌套。 如果您對文件的生產有任何控制權,我會將'('和')'內的分隔符替換爲逗號以外的其他分隔符。這樣你的CSV解析器可以忽略第一遍中的那些。你必須像一個bean:

firstname: John 
lastname: Doe 
tempGroups: (group1;group2) 

然後,您可以輕鬆地分割使用

String[] groups = tempGroups.split("[();]") 

要提出,在DB組,迭代豆類的收集和每個bean,遍歷將各個用戶添加到其組中。

for (User user:Users) { 
    for (String group:user.getGroups()) { 
     db.insert(user.getFirstname(), user.getLastName(), group); 
    } 
} 
+0

@bohemian:感謝這個新的有趣的事情。你能提供更多的細節或例子嗎?基本上我想分配所有這些用戶信息到我的userDTO類。所以我如何創建DTO爲此並將所有此值分配給userDTO類並存儲到數據庫中 – Raje

+0

我應該如何爲UserIn創建DTO類用戶包含以下詳細信息 名,姓,姓氏.role,group1#group#group3 。所以基本上角色由group1,group2,group3組成。 – Raje