Я хочу сохранить данные с Джексоном в существующий файл (обновить его), но он не будет работать, когда я запускаю свой проект из jar.
Мне нужно использовать json в качестве «базы данных» (я знаю, что это довольно глупо, но это для школьного проекта), и для этого я загружаю и сохраняю все данные, когда выполняю какие-либо операции CRUD.Он работает нормально, когда я запускаю его с IDE, но когда я пытался как jar, у него была проблема с чтением файла из ClassPathResource
.
Так что у меня есть этот метод для сохранения изменений в файл:
private List<Item> items;
private ObjectMapper mapper;
private ObjectWriter writer;
public void saveData() {
mapper = new ObjectMapper();
writer = mapper.writer(new DefaultPrettyPrinter());
try {
writer.writeValue(new ClassPathResource("items.json").getFile(), items);
} catch (IOException e) {
e.printStackTrace();
}
}
И он прекрасно работает, когда я запускаю его через IntelliJ, но не работает, когда я запускаю его как банку.Я нашел решение для загрузки данных, используя InputStream
из этот вопрос и метод выглядит следующим образом:
public void loadData() {
mapper = new ObjectMapper();
try {
ClassPathResource classPathResource = new ClassPathResource("items.json");
InputStream inputStream = classPathResource.getInputStream();
File tempFile = File.createTempFile("test", ".json");
FileUtils.copyInputStreamToFile(inputStream, tempFile);
System.out.println(tempFile);
System.out.println(ItemDao.class.getProtectionDomain().getCodeSource().getLocation().getPath().toString());
items = mapper.readValue(tempFile, new TypeReference<List<Item>>() {
});
} catch (IOException e) {
items = null;
e.printStackTrace();
}
}
Но я до сих пор не знаю, как на самом деле сохранить изменения.Я думал об использовании FileOutputStream
, но ничего не добился.
Итак, я хочу, чтобы это работало в jar-файле, и я могу сохранять изменения в том же файле, заранее спасибо за помощь!