Чтение файлов CSV с известными и неизвестными столбцами java

Мне интересно, есть ли способ читать CSV-файлы с известными и неизвестными столбцами.

например, столбец в первом файле csv: id, имя, фамилия, город, страна неизвестные столбцы — это город и страна.

второй файл csv:

id, имя, фамилия, номер телефона столбец unknwon - это номер телефона

Объект, который я хочу разобрать, это:

public class Person {

    Long id;
    String firstname;
    String lastname;

    Map<String,String> additionalInfo;

}

карта AdditionalInfo будет содержать в качестве ключей «неизвестные» столбцы, а значениями будут значения строки в этом столбце.

Есть идеи?

Спасибо.

вы пробовали с opencsv?

Deadpool 15.07.2019 08:57

Я сделал, но я не видел опции, которая обрабатывает неизвестные столбцы

Gal Sosin 15.07.2019 08:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
1 489
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

OpenCSV позволяет вам сделать что-то подобное, используя аннотацию @CsvBindAndJoinByName. Взято из документы:

public class Demonstration {

   @CsvBindByName(column = "index")
   private String index;

   @CsvBindAndJoinByName(column = ".*", elementType = String.class)
   private MultiValuedMap<String, String> theRest;

   // Getters and setters go here
}

В тех же документах упоминается предостережение: вы должны быть осторожны, чтобы не было перекрывающихся шаблонов, если у вас несколько @CsvBindAndJoinByName, иначе результат не определен.

Спасибо, проверю и сообщу

Gal Sosin 16.07.2019 13:39

Была такая же ситуация, хотел получить доступ к неизвестному столбцу из файла CSV. Вот решение-

`

public class CSVFileDTO {
@CsvBindByName
private String name;

@CsvBindAndJoinByName(column = ".*", elementType = String.class)
private MultiValuedMap<String, String> theRest;

} `

Способ доступа к колонке «Остальное» —

    List<CSVFileDTO> resultData;
    MultiValuedMap<String, String> multivaluedMap = resultData.get(0).getTheRest();
    Collection<Map.Entry<String, String>> entries = multivaluedMap.entries();

    for(Map.Entry<String, String> ent : multivaluedMap.entries()){
        entityList.add(ent.getKey());
    }

Проверьте функцию 9 этого https://github.com/ozlerhakan/poiji API для чтения файлов Excel.

public class MusicTrack {

@ExcelCellName("ID")
private String employeeId;

@ExcelCellName("AUTHOR")
private String author;

@ExcelCellName("NAME")
private String name;

@ExcelUnknownCells
private Map<String, String> unknownCells;}

Другие вопросы по теме