Типобезопасный не шаблонный каркас для сохранения / загрузки настроек приложения - PullRequest
0 голосов
/ 14 января 2020

Я исследовал хорошую библиотеку для сохранения / загрузки GUI настроек в локальный файл относительно самого приложения JAR, но я нашел общий способ сделать это Java Preferences API, поэтому я написал следующий класс:

import lombok.val;

import java.io.*;
import java.util.Properties;

import static com.mycompany.utils.ProgramDirectoryUtilities.getProgramDirectory;
import static java.io.File.*;

public class PersistentSettingsManager
{
    private static final String PERSISTENT_SETTINGS_EXTENSION = "properties";
    private Properties properties;
    private String propertiesFilePath;

    private PersistentSettingsManager(String propertiesFilePath)
    {
        this.propertiesFilePath = propertiesFilePath;
        loadProperties();
    }

    public PersistentSettingsManager()
    {
        this(null);
    }

    public void loadProperties()
    {
        if (propertiesFilePath == null)
        {
            val programDirectory = getProgramDirectory(true);
            propertiesFilePath = programDirectory + separator + "Settings." + PERSISTENT_SETTINGS_EXTENSION;
        }

        properties = new Properties();

        try
        {
            val propertiesFile = new File(propertiesFilePath);
            if (propertiesFile.exists())
            {
                val propertiesReader = new FileInputStream(propertiesFilePath);
                properties.load(propertiesReader);
            }
        } catch (Exception exception)
        {
            exception.printStackTrace();
        }
    }

    public void put(String key, String value)
    {
        properties.setProperty(key, value);
    }

    public void writeToFile()
    {
        try (val propertiesWriter = new FileOutputStream(propertiesFilePath))
        {
            properties.store(propertiesWriter, null);
        } catch (IOException exception)
        {
            exception.printStackTrace();
        }
    }

    public String get(String key)
    {
        return (String) properties.get(key);
    }
}

Мне не нравится, что получение / помещение ключей, например, не является безопасным для типов. Кроме того, почему я должен написать шаблонный класс для чтения / записи настроек приложения несколько разумно? Может быть, кто-то может указать мне на подход, библиотеку или код, который выполняет загрузку / сохранение общих типов данных с перегрузками и тому подобным и делает по крайней мере все, что мне нужно (без значительного стандартного кода).

...