Отображение данных CSV в настраиваемые поля - PullRequest
0 голосов
/ 10 ноября 2019

Я новичок в загрузке Java Spring и пытаюсь прочитать данные из файла CSV, а затем передать эти данные в мой интерфейс через REST.

Я использую OpenCSV для анализа моего файла. Вот мой пример строки в моем файле имя, фамилия, данные карты.

данные карты состоят из номер карты и срок действия . Таким образом, мой пример текста выглядит следующим образом:

joe, keller, 123456 22-2-1999.

Вывод из моей конечной точки отдыха должен быть:

{
  "firstname": "joe",
  "lastname" : "keller",
  "card number" : "123456",
  "expiry date" : 22-2-1999
}

В настоящее время я читаю файл, используя CsvToBeanBuilder, и, похоже, застрялс отображением последней строки на два разных элемента.

1 Ответ

1 голос
/ 11 ноября 2019

Поскольку последний столбец содержит 2 поля - номер карты и срок действия , вы не можете напрямую использовать CsvToBeanBuilder для чтения файла CSV и преобразования его в ваш POJO. Альтернативный способ показан следующим образом:

Сначала я предполагаю, что у вас уже есть POJO:

class CreditCardInfo {
    private String firstname;
    private String lastname;
    private String cardNumber;
    private String expiryDate;

    //general getters and setters
    //toString()
}

Затем вы можете использовать CSVReader.readNext(), чтобы прочитать каждую строку в строкумассив. А для 3-го столбца в CSV-файле вы можете разделить его на 2 поля пустым пробелом (""): "123456" и "22-2-1999" с String.trim() для игнорирования начального пробела. Поэтому вы можете сохранить эти поля в cardNumber и expiryDate POJO CreditCardInfo соответственно.

Фрагмент кода

try (
    Reader reader = Files.newBufferedReader(Paths.get("So58792579.csv"));
    CSVReader csvReader = new CSVReader(reader);
) {
    String[] nextRecord;
    while ((nextRecord = csvReader.readNext()) != null) {
        CreditCardInfo creditCardInfo = new CreditCardInfo();
        creditCardInfo.setFirstname(nextRecord[0]);
        creditCardInfo.setLastname(nextRecord[1].trim()); //trim() for ignoring leading space
        creditCardInfo.setCardNumber(nextRecord[2].trim().split(" ")[0]);
        creditCardInfo.setExpiryDate(nextRecord[2].trim().split(" ")[1]);

        System.out.println(creditCardInfo.toString());
    }
} catch (IOException e) {
    e.printStackTrace();
}

Вывод на консоль

CreditCardInfo [имя = джо, фамилия = келлер, номер карты = 123456, дата истечения срока действия = 22-2-1999]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...