Нужен универсальный метод для чтения CSV-файлов - PullRequest
0 голосов
/ 03 декабря 2018

Я работаю над весенним веб-приложением, в котором я помогаю пользователю загружать файлы 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 голосов
/ 03 декабря 2018

Если я понимаю, что вы подразумеваете под универсальным, вы можете сделать метод универсальным для некоторого типа 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;
    }
}
...