Класс для хранения настроек

Рейтинг: -2Ответов: 2Опубликовано: 20.06.2023

Проект с формами(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 из-за линейности не подходит. Интересует только то, что есть в стандартной поставке, либо делать самому.

Ответы

▲ 1Принят

Согласен с комментарием по поводу библиотеки 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.

▲ 0

Много вариантов сохранения информации. Например, класс Preferences. Он позволяет сохранять некоторую информацию о состоянии приложения, пользовательские настройки, например размер окна.