Разобрать дату из файла, используя java split - PullRequest
0 голосов
/ 25 марта 2020

У меня есть код, который анализирует файл, а затем вставляет строки в таблицу. Первоначально я проигнорировал первую строку, потому что в ней были только дата и бесполезные данные. Я хочу взять дату и вставить ее во все строки в моей таблице, но не знаю, как на самом деле это сделать. Я знаю, что мне нужно будет отредактировать свою сущность, чтобы включить в нее дату, но я не знаю, как редактировать мой код для разбора даты, или лучше использовать новый метод, который просто вставляет дату.

формат файла

20200310|extra|extra|extra||
Mn1223|01192|windows|extra|extra|extra||
Sd1223|02390|linux|extra|extra|extra||
2

текущая таблица

account_name      command_name   system_name    createDt
Mn1223            01192          windows        NULL
Sd1223            02390          linux          NULL

Я хочу, чтобы 20200310 был вставлен в createDt

Объект / модель

public ZygateEntity(String accountName, String commandName, String systemName){
        this.accountName=accountName;
        this.commandName=commandName;
        this.systemName=systemName;
    }

   //getters and setters

Метод анализа файла

   private List<ZygateEntity> parseZygateData() throws IOException {
        String filePath = "C:\\DEV\\Test_file.xlsx";

        List<String> lines = Files.readAllLines(Paths.get(filePath));

        // remove date and amount
        lines.remove(0);
        lines.remove(lines.size() - 1);

        return lines.stream()
                .map(s -> s.split("[|]")).map(val -> new ZygateEntity(val[0],val[1],val[2])).collect(Collectors.toList());
    }

метод вставки

public void insertZygateData(List<ZygateEntity> parseData) {
    String sql = "INSERT INTO Landing.midrange_xygate_load (account_name,command_name,system_name)"+
            "VALUES (:account_name,:command_name,:system_name)";

    for (ZygateEntity zygateInfo : parseData){
        SqlParameterSource source = new MapSqlParameterSource("account_name", zygateInfo.getAccountName())
                .addValue("command_name", zygateInfo.getCommandName())
                .addValue("system_name", zygateInfo.getSystemName());
        namedParameterJdbcTemplate.update(sql, source);
    }
}

1 Ответ

0 голосов
/ 26 марта 2020

java .time

    // remove date and amount
    String dateLine = lines.remove(0);
    String dateString = dateLine.split("[|]")[0];
    LocalDate date
            = LocalDate.parse(dateString, DateTimeFormatter.BASIC_ISO_DATE);
    lines.remove(lines.size() - 1);

Это дает вам LocalDate объект, готовый для вставки с каждой строкой.

java .time - современная дата Java и API времени и имеет встроенный форматер для вашего формата даты, 20200310: DateTimeFormatter.BASIC_ISO_DATE.

...