使用Java导入CSV文件

时间:2011-06-23 05:30:41

标签: java database csv

我目前正在开发一个需要用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
...

那么我应该如何拆分所有这些并存储在数据库中?

该文件包含一系列我想要放入数据库的记录,所以如果有人对此有任何想法,请告诉我。

任何建议都是非常有必要的。

3 个答案:

答案 0 :(得分:1)

  • 阅读文件(BufferedFileReader)
  • 遍历行(for-loop)
  • 将行拆分为变量(StringTokenizer)
  • 汇总查询(String)
  • 对您的数据库执行查询(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);
        }
    }
    

答案 1 :(得分:0)

有一个名为opencsv的图书馆可以为您完成所有繁重的工作。它会自动处理双引号等嵌入逗号等问题。

maven依赖性定义是:

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

我已经使用过它并且可以推荐它。

答案 2 :(得分:0)

您应该查看openCSV。它们支持javabeans映射,可以让您为列命名并将其映射到DTO:http://opencsv.sourceforge.net/#javabean-integration 我看到的一个问题是你正在使用括号组嵌套。 如果您对文件的生成有任何控制,我会将'('和')'中的分隔符替换为逗号之外的其他内容。这样,您的CSV解析器可以忽略第一遍中的那些。你将有一个像:

的豆子
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);
   }
}