Я исследовал хорошую библиотеку для сохранения / загрузки 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);
}
}
Мне не нравится, что получение / помещение ключей, например, не является безопасным для типов. Кроме того, почему я должен написать шаблонный класс для чтения / записи настроек приложения несколько разумно? Может быть, кто-то может указать мне на подход, библиотеку или код, который выполняет загрузку / сохранение общих типов данных с перегрузками и тому подобным и делает по крайней мере все, что мне нужно (без значительного стандартного кода).