Считывание даты из файла и запись в файл

191
06 января 2018, 02:52

В файле у меня условная база данных, в которой хранятся объекты с данными. Одним из данных является дата и записывается дата в формате dd.mm.yyyy, в коде я это сделал полем:

 DateFormat FORMAT = new SimpleDateFormat("dd.MM.yyyy");

Когда заношу данные об объекте в файл, перевожу их в String. Затем считываю данные из файла, создаю объект и ему надо просетить все поля данными из считываемого файла. Вот тут с датой возникает проблема и я не знаю как её решить. В файле дата в виде 23.11.2017, я вот таким образом её преобразовываю из String в Date order.setDateFrom(FORMAT.parse(fields[17])); и когда, после этого, записываю данные снова в файл, то дата записывается уже в таком виде Thu Nov 23 00:00:00 EET 2017. Подскажите как мне просетить дату, чтобы записывалась в файл в виде "dd.MM.yyyy"

Метод считывания из файла возвращает список объектов:

private static LinkedList<Order> gettingListObjectsFromFileOrderDB(String path)throws Exception{
        if(path == null)
            throw new BadRequestException("This path " + path + " is not exists");
        LinkedList<Order> arrays = new LinkedList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(path))){
            String line;
            while ((line = br.readLine()) != null){
                String[] result = line.split("\n");
                for (String el : result){
                    if (el != null){
                        String[] fields = el.split(",");
                        Order order = new Order();
                        order.setId(Long.parseLong(fields[0]));
                        String idUser = "";
                        for (Character ch : fields[1].toCharArray()) {
                            if (ch != null && Character.isDigit(ch)) {
                                idUser += ch;
                            }
                        }
                        System.out.println("User - " + idUser);
                        order.setUser(findUserByIdInFileUserDB(Long.parseLong(idUser)));
                        String idRoom = "";
                        for (Character ch : fields[6].toCharArray()) {
                            if (ch != null && Character.isDigit(ch)) {
                                idRoom += ch;
                            }
                        }
                        System.out.println("Room - " + idRoom);
                        order.setRoom(findRoomById(Long.parseLong(idRoom)));
                        order.setDateFrom(FORMAT.parse(fields[17]));
                        System.out.println("DateFrom after readed from file OrderDB - " + order.getDateFrom());
                        order.setDateTo(FORMAT.parse(fields[18]));
                        System.out.println("DateTo after readed from file OrderDB - " + order.getDateTo());
                        order.setMoneyPaid(Double.parseDouble(fields[19]));
                        arrays.add(order);
                    }
                }
            }
        }catch (FileNotFoundException e){
            throw new FileNotFoundException("File does not exist");
        } catch (IOException e) {
            throw new IOException("Reading from file " + path + " failed");
        }
        return arrays;
    }

Метод записи в файл:

public static void cancelReservation(long roomId, long userId)throws Exception{
        if (roomId == 0 || userId == 0)
            throw new BadRequestException("Invalid incoming data");
        if(checkIdRoomInOrderDB(utils.getPathOrderDB(), roomId))
            throw new BadRequestException("Room with id " + roomId + " is not exist");
        if (checkIdUserInOrderDB(utils.getPathOrderDB(), userId))
            throw new BadRequestException("User with id " + userId + " is not exist");
        StringBuffer res = new StringBuffer();
        int index = 0;
        for (Order el : gettingListObjectsFromFileOrderDB(utils.getPathOrderDB())) {
            if (el != null && el.getUser().getId() != userId && el.getRoom().getId() != roomId) {
                res.append(Long.toString(el.getId())).append(",");
                res.append(el.getUser().toString()).append(",");
                res.append(el.getRoom().toString()).append(",");
                res.append(el.getDateFrom().toString()).append(",");
                res.append(el.getDateTo().toString()).append(",");
                res.append(Double.toString(el.getMoneyPaid())).append("\n");
            }
            index++;
        }
        writerInFailBD(utils.getPathOrderDB(), res);
    }

Вывод в консоль я делал для себя, чтобы на ходу посмотреть что получается.

Answer 1

Без кода сложно сказать наверняка, но скорее всего при повторной записи вы записываете дату (экземпляр класса Date) через вызов метода toString(), поэтому на выходе вы получаете формат по-умолчанию. А должно быть так:

DateFormat format = new SimpleDateFormat("dd.MM.yyyy");
Date date = format.parse(someString);   // получаем дату из строки
String output = format.format(date);    // а теперь наоборот
READ ALSO
OpenCL на С++ или на Java

OpenCL на С++ или на Java

На C++ или на java выгоднее/дешевле/быстрее реализовать программу для работы с большими объемами данных? Уточню что архитектура программы предполагает...

151
SIP Invite пробел между headers и sdp

SIP Invite пробел между headers и sdp

Когда я формирую INVITE ответ другому юзеру, то нужно добавить пустую строку между headers и sdp, если я ее не добавляю, то звонок не происходитЕсть...

185
Не работает TextToSpeech

Не работает TextToSpeech

В общем, более абсурда я не виделЕсть голосовое приложение, которое по логике, должно отправлять 1234 на сервер(точнее на планшет, на котором...

270
Android умножение

Android умножение

У меня в приложении есть много float значений для денег, так вот когда я некоторые перемножаю у меня в ответ выходит 00

198