如何在java中读取多个不同格式的csv文件

时间:2016-02-27 13:38:49

标签: java spring-boot

我正在使用watchservice实现csv文件侦听器。我的要求是: 使用java watch服务从注册的目录中获取csv文件。我正在努力将收到的文件和存储的数据处理到数据库中。这里的问题是 - CSV文件格式未预定义,文件可以有任意数量的列和不同的标题。我已经推荐了许多网站但没有找到任何解决方案。请帮忙。

1 个答案:

答案 0 :(得分:1)

此示例代码可帮助您处理文件:

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活动。

我希望这个答案可以帮到你