簡體   English   中英

用Java導入CSV文件

[英]Importing a CSV file in Java

我目前正在開發一個程序,該程序需要用Java讀取CSV文件。 現在,我已經可以正確加載文件了,這不是問題,我想從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
...

所以我應該如何拆分所有這些並存儲在數據庫中?

該文件包含一系列要記錄到數據庫中的記錄,因此,如果有人對此有任何想法,請告訴我。

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

  • 讀取文件(BufferedFileReader)
  • 遍歷行(循環)
  • 將行分解為變量(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); } } 

有一個名為opencsv的庫可以為您完成所有繁重的工作。 它會自動處理雙引號中包含逗號等問題。

Maven依賴定義為:

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

我已經用過了,可以推薦。

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

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

然后,您可以使用輕松拆分組

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

要將其放入數據庫中,遍歷bean的集合,並為每個bean遍歷組的集合,以向每個用戶添加其組。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM