Мне нужно сопоставить определенный столбец CSV на основе индекса с определенными атрибутами POJO. Сопоставление будет основано на файле json, который будет содержать columnIndex и имя атрибута, что означает, что для определенного columnIndex из CSV-файла вы должны отобразить определенный атрибут из класса Pojo.
Ниже приведен пример файла json, в котором показана стратегия сопоставления столбцов с атрибутами Pojo.
[{ "Индекс": 0, "имя_столбец": "дата"}, { "Индекс": 1, "имя_столбец": "deviceAddress"}, { "Индекс": 7, "имя_столбец": "IPaddress" }, { "индекс": 3, "имя_столбец": "имя_пользователь"}, { "индекс": 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");
Пожалуйста, посмотрите, может ли кто-нибудь помочь мне в этом деле.