需要通用的方法来读取csv文件

时间:2018-12-03 05:30:50

标签: java spring spring-mvc opencsv

我正在基于Spring Web的应用程序上工作,在该应用程序中,我可以方便用户上载csv文件,并且csv文件的所有内容都将存储在我的MySQL数据库中。我使用OpenCsv读取CSV文件时,写了一个我想通用的方法,因为现在它只为我的模型Employee写,我想将它用作Utility类。

在这里

public static List<Employee> parseCSVWithHeader() throws IOException {
    CSVReader reader = new CSVReader(new FileReader("emps1.csv"), ',');

    HeaderColumnNameMappingStrategy<Employee> beanStrategy = new HeaderColumnNameMappingStrategy<Employee>();
    beanStrategy.setType(Employee.class);

    CsvToBean<Employee> csvToBean = new CsvToBean<Employee>();
    List<Employee> emps = csvToBean.parse(beanStrategy, reader);

    System.out.println(emps);
    reader.close();

    return emps;
} 

1 个答案:

答案 0 :(得分:3)

假设我理解通用的含义,则可以使该方法在某些类型T上通用。您将需要传递Class<T>作为参数(例如Employee.class)。您还应该传递要读取的文件。并且,假设CSVReader是可关闭的,我希望使用try-with-resources。喜欢,

public static <T> List<T> parseCSVWithHeader(Class<T> cls, String fileName) 
                throws IOException {
    try (CSVReader reader = new CSVReader(new FileReader(fileName), ',')) {
        HeaderColumnNameMappingStrategy<T> beanStrategy = new HeaderColumnNameMappingStrategy<>();
        beanStrategy.setType(cls);

        CsvToBean<T> csvToBean = new CsvToBean<>();
        List<T> emps = csvToBean.parse(beanStrategy, reader);
        System.out.println(emps);
        return emps;
    }
}