java - 需要通用方法来读取 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;
}
解决方案
假设我理解你所说的通用的意思,你可以使方法在某种类型上通用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;
}
}
推荐阅读
- ios - 将新数据添加到 UICollectionView,同时保持当前滚动位置而不会出现 CollectionViewCell 闪烁
- apache-tika - Apache Tika 仅用于解析 Office 文档 - 构建排除项
- java - 如何避免重复嵌套的 switch 语句
- javascript - 如何从类中加载默认图像
- status - GCP AutoML Vision API:是否有 API 可用于检查特定模型的训练状态?
- javascript - 设备方向未按预期工作
- go - 如何在循环外使用模板变量?
- ios - Xcode 无效的工具链。安装 Xcode 11 Beta 后
- templates - 当有多个模板时如何修改或删除 JESS 事实
- azure - 机器人模拟器错误:POST 400 directline.postActivity