首页 > 解决方案 > 需要通用方法来读取 csv 文件

问题描述

我正在开发基于 Spring Web 的应用程序,在该应用程序中,我方便用户上传 csv 文件,并且 csv 文件的所有内容都将存储在我的 MySQL 数据库中。我使用 OpenCsv 来读取 CSV 文件,我写了一个方法,我希望它是通用的,因为现在它只为我的 Model 编写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;
} 

标签: javaspringspring-mvcopencsv

解决方案


假设我理解你所说的通用的意思,你可以使方法在某种类型上通用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;
    }
}

推荐阅读