У меня есть HashMap, который я инициализирую один раз в блоке stati c из файла json. Затем я работаю со своим локальным HashMap, чтобы сохранить запросы пользователей.
static {
TypeFactory typeFactory = mapper.getTypeFactory();
MapType mapType = typeFactory.constructMapType(ConcurrentHashMap.class, String.class, GooglePlayGame.class);
try {
games = mapper.readValue(new File("games.json"), mapType);
} catch (IOException e) {
log.error(e.getMessage());
}
}
Когда я решу остановить приложение и запустить его снова, я могу добавить новую пару «ключ-значение» к этой карте, но когда я пытаюсь добавить изменения в мой json файл, все, что уже было в json файле, дублируется + новое значение. Этот код:
try(JsonGenerator g = mapper.getFactory().createGenerator(
new PrintWriter(new BufferedWriter(new FileWriter(new File("games.json"), true))))) {
mapper.writeValue(g, games);
} catch (IOException e) {
log.error(e.getMessage());
}
Я понял, почему это происходит (из-за инициализации stati c при каждом новом запуске, а затем я снова и снова записываю в файл все hashmap), но я не знаю, как это исправить , Я хочу добавить новые пары в существующий файл json.
Например: добавление первого запроса, все в порядке:
{"Machinarium":
{"Title":"Machinarium",
"Updated":"28 February, 2019",
"Version":"2.5.6","Requirements":"4.1,
"Contacts":"support@amanita-design.net"
}
Затем я перезапускаю приложение и получаю другой запрос, мой json файл теперь выглядит так:
{"Machinarium":
{"Title":"Machinarium",
"Updated":"28 February, 2019",
"Version":"2.5.6","Requirements":"4.1,
"Contacts":"support@amanita-design.net",
....
},
{"Machinarium":
{"Title":"Machinarium",
"Updated":"28 February, 2019",
"Version":"2.5.6","Requirements":"4.1,
"Contacts":"support@amanita-design.net",
....
},
"Samorost 3":
{"Title":"Samorost 3",
"Updated":"November 14, 2019",
"Version":"1.0",
"Requirements":"4.3,
...}
Как видите, здесь дубликат.
Итак, цель: создать HashMap -> получить запрос пользователя -> записать этот запрос (пара "ключ-значение") в локальный hashmap -> записать hashmap (или каждую пару отдельно? Хмм) в json файл. Затем, когда приложение запустится снова: инициализируйте hashmap из этого файла json с сохраненными запросами -> получите новый запрос пользователя -> добавьте новые запросы в файл json.
Так что мне нужно записать каждую пару по одной в файл (не всю карту), но как?