我必须根据索引将特定的CSV列映射到特定的POJO属性。映射将基于包含columnIndex和属性名称的json文件,这意味着对于来自csv文件的特定columnIndex,您必须映射来自Pojo类的特定属性。下面是一个json文件示例,它显示了带有Pojo属性的列映射策略。
{“索引”:0,“列名”:“日期”},{“索引”:1,“列名”:“deviceAddress”},{“索引”:7,“列名”:“iPAddress”},{“索引”:3,“列名”:“userName”},{“索引”:10,“列名”:“组”},{“索引”:5,“列名”:“eventCategoryName”},{“索引”:6,“列名”:“消息”}
我尝试过使用OpenCSV库,但我面临的挑战是我无法用它阅读部分列。和上面的json一样,你可以看到我们跳过了索引2和4来读取CSV文件。下面是openCSV文件的代码。
public static List<BaseDataModel> readCSVFile(String filePath,List<String> columnListBasedOnIndex) {
List<BaseDataModel> csvDataModels = null;
File myFile = new File(filePath);
try (FileInputStream fis = new FileInputStream(myFile)) {
final ColumnPositionMappingStrategy<BaseDataModel> strategy = new ColumnPositionMappingStrategy<BaseDataModel>();
strategy.setType(BaseDataModel.class);
strategy.setColumnMapping(columnListBasedOnIndex.toArray(new String[0]));
final CsvToBeanBuilder<BaseDataModel> beanBuilder = new CsvToBeanBuilder<>(new InputStreamReader(fis));
beanBuilder.withMappingStrategy(strategy);
csvDataModels = beanBuilder.build().parse();
} catch (Exception e) {
e.printStackTrace();
}
}
List<ColumnIndexMapping> columnIndexMappingList = dataSourceModel.getColumnMappingStrategy();
List<String> columnNameList = columnIndexMappingList.stream().map(ColumnIndexMapping::getColumnname)
.collect(Collectors.toList());
List<BaseDataModel> DataModels = Utility
.readCSVFile(file.getAbsolutePath() + File.separator + fileName, columnNameList);
我也尝试过单一性,但是使用这个库,我如何将csv映射到特定的属性。下面是代码-
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically(); //detects the format
settings.getFormat().setLineSeparator("\n");
//extracts the headers from the input
settings.setHeaderExtractionEnabled(true);
settings.selectIndexes(0, 2); //rows will contain only values of columns at position 0 and 2
CsvRoutines routines = new CsvRoutines(settings); // Can also use TSV and Fixed-width routines
routines.parseAll(BaseDataModel.class, new File("/path/to/your.csv"));
List<String[]> rows = new CsvParser(settings).parseAll(new File("/path/to/your.csv"), "UTF-8");
在这种情况下,请看一下有没有人能帮我。
https://stackoverflow.com/questions/56059978
复制相似问题