我目前正在开发一个需要用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
...
那么我应该如何拆分所有这些并存储在数据库中?
该文件包含一系列我想要放入数据库的记录,所以如果有人对此有任何想法,请告诉我。
任何建议都是非常有必要的。
答案 0 :(得分:1)
对您的数据库执行查询(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);
}
}