-2
我正在使用watchservice实现csv文件侦听器。我的要求是: 使用java watch service从注册目录中获取csv文件。我正在努力处理收到的文件并将数据存储到数据库中。这里的问题是 - CSV文件格式不是预定义的,文件可以有任意数量的列和不同的标题。我提到了很多网站,但没有找到任何解决方案。请帮忙。如何在java中读取不同格式的多个csv文件
我正在使用watchservice实现csv文件侦听器。我的要求是: 使用java watch service从注册目录中获取csv文件。我正在努力处理收到的文件并将数据存储到数据库中。这里的问题是 - CSV文件格式不是预定义的,文件可以有任意数量的列和不同的标题。我提到了很多网站,但没有找到任何解决方案。请帮忙。如何在java中读取不同格式的多个csv文件
此示例代码可以帮助你处理你的文件:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
private static String HEADER_DELIMITER = ",";
private static String DATA_DELIMITER = ",";
public static void main(String[] args) {
/**
* for each file read lines and then ...
*/
String headerLine = "id,name,family";
String[] otherLines = { "1,A,B", "2,C,D" };
List<Student> students = new ArrayList<Student>();
String[] titles = headerLine.split(HEADER_DELIMITER);
for (String line : otherLines) {
String[] cells = line.split(DATA_DELIMITER);
Student student = new Student();
int i = 0;
for (String cell : cells) {
student.add(titles[i], cell);
i++;
}
students.add(student);
}
System.out.println(students);
/*
* output:
* [Student [data={id=1, family=B, name=A}], Student [data={id=2, family=D, name=C}]]
*/
/**
* save students in your table.
*/
}
static class Student {
Map<String, String> data = new HashMap<String, String>();
public void add(String key, String value) {
data.put(key, value);
}
@Override
public String toString() {
return "Student [data=" + data + "]";
}
}
}
用于保存结果数据的基础上,这取决于你对自己的数据模型的决定。例如,如果这些csv文件在大多数列中很常见,并且在几列中不同,我建议使用以下数据模型:
您应该有一个包含公共列(id,name,family)的表(例如Student)和另一个列只有3列的表(studentForeignKey,key,value),并在此表中存储其他额外的列。例如(id = 1,key = activity,value = TA),这意味着id = 1的学生有TA活动。
我希望这个答案可以帮到你
你可以分享你到目前为止试过的代码吗? –
如果文件格式完全是任意的,则不能用泛型代码对其进行有意义的处理。你可以做的一件事是手动逐行解析文件,并在','上分割并在无限循环中执行,直到达到文件结束。 – prabugp