Класс для хранения настроек
Проект с формами(JavaFX). Хочу сделать класс для хранения настроек, так же необходимо чтение и запись в файл. Настройки можно разделить на настройки приложения и форм/элементов.
Установка свойств форм/элементов будет происходить при создании, обратное присвоение при закрытии формы. Предполагаю такую xml структуру, думаю из этого будет проще понять, что мне надо.
<properties>
<app>
<value1>10</value1>
<value2>20</value2>
</app>
<forms>
<form name="main">
<heigth>100</heigth>
<weight>100</weight>
<elements>
<element name = "text">
<heigth>10</heigth>
<weight>10</weight>
</element>
</elements>
</form>
</forms>
</properties>
Интересуют идеи как это сделать.
Properties из-за линейности не подходит. Интересует только то, что есть в стандартной поставке, либо делать самому.
Ответы (2 шт):
Много вариантов сохранения информации. Например, класс Preferences. Он позволяет сохранять некоторую информацию о состоянии приложения, пользовательские настройки, например размер окна.
Согласен с комментарием по поводу библиотеки Jackson XML - ей гораздо проще пользоваться по сравнению с DOM и SAX парсерами. По крайней мере для вашей задачи её будет более чем достаточно. Для вашей структуры xml это будет выглядеть примерно так:
@Getter
@Setter
@JacksonXmlRootElement(localName = "properties")
class Properties {
private App app;
@JacksonXmlElementWrapper(localName = "forms")
@JacksonXmlProperty(localName = "form")
private List<Form> forms;
}
@Getter
@Setter
class App {
private int value1;
private int value2;
}
@Getter
@Setter
class Form {
@JacksonXmlProperty(isAttribute = true)
private String name;
private int height;
private int weight;
@JacksonXmlElementWrapper(localName = "elements")
@JacksonXmlProperty(localName = "element")
private List<Element> elements;
}
@Getter
@Setter
class Element {
@JacksonXmlProperty(isAttribute = true)
private String name;
private int height;
private int weight;
}
// работа с парсером
XmlMapper xmlMapper = new XmlMapper();
// заполнение полей класса
Properties properties = new Properties();
...
// запись в файл
xmlMapper.writeValue(new File("configuration.xml"), properties);
// чтение из файла
Properties p = xmlMapper.readValue(new File("configuration.xml"), Properties.class);
По поводу "стандартной поставки" не всё так просто. JDK содержало парсеры в подпроекте Jakarta, но вроде с 11 версии Jakarta исключена из JDK. И вроде это относится только к оракловском оф. релизу, но при этом Jakarta присутствует в OpenJDK. В общем предлагаю не париться и использовать Jackson.