Лучший класс для обновления файлов свойств?
Хотя java.util.properties
позволяет читать и записывать свойства файла, запись не сохраняет форматирование. Не удивительно, потому что он не привязан к файлу свойств.
Есть ли класс PropertyFile
- или какой-то такой - который сохраняет комментарии и пустые строки и обновляет значения свойств на месте?
Ответы
Ответ 1
Это не намного лучше, чем Apache Commons Configuration API. Это обеспечивает унифицированный подход к настройке из файлов свойств, XML, JNDI, источников данных JDBC и т.д.
Обработка файлов свойств очень хорошая. Он позволяет сгенерировать объект PropertiesConfigurationLayout из вашего свойства, который сохраняет как можно больше информации о вашем файле свойств (пробелы, комментарии и т.д.). Когда вы сохраняете изменения в файле свойств, они будут сохранены как можно лучше.
Пример кода:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.PropertiesConfigurationLayout;
public class PropertiesReader {
public static void main(String args[]) throws ConfigurationException, FileNotFoundException {
File file = new File(args[0] + ".properties");
PropertiesConfiguration config = new PropertiesConfiguration();
PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config);
layout.load(new InputStreamReader(new FileInputStream(file)));
config.setProperty("test", "testValue");
layout.save(new FileWriter("path\\to\\properties\\file.properties", false));
}
}
См. также:
Ответ 2
Вы можете посмотреть Конфигурация сообщества Apache, которая содержит PropertiesConfiguration.
Однако, поскольку я никогда не использовал его, я не знаю, сохраняет ли он комментарии и форматирование...
Однако, это сулит попытку...
Ответ 3
Пример кода для использования библиотеки конфигурации Apache Commons, предоставленной Патриком Боосом, излишне усложнен. Вам не нужно явно использовать свойство PropertiesConfigurationLayout, если вам не нужен какой-то расширенный контроль над выходом. СвойстваКонфигурация сама по себе достаточна для сохранения комментариев и форматирования:
PropertiesConfiguration config = new PropertiesConfiguration("myprops.properties");
config.setProperty("Foo", "Bar");
config.save();
(Примечание: этот код работает для существующей стабильной версии 1.10. Я не проверял, работает ли она на доступных альфа-версиях 2.0, доступных в настоящее время.)
Ответ 4
File file = new File("src/test/resources/1automation.properties");
PropertiesConfiguration config = new PropertiesConfiguration();
PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config);
layout.load(new InputStreamReader(new FileInputStream(file)));
FileWriter fw = new FileWriter("src/test/resources/1automation.properties",false);
config.setProperty("myssi.admin.name", "testValue");
layout.save(fw);
Ответ 5
Класс configuration2 имеет различный синтаксис. Вот пример их использования:
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.PropertiesConfigurationLayout;
public void test() {
PropertiesConfiguration config = new PropertiesConfiguration();
PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout();
config.setLayout(layout);
layout.load(config, new FileReader("config.properties"));
config.setProperty("KEY", "VALUE");
StringWriter stringWriter = new StringWriter();
layout.save(config, stringWriter);
LOG.debug("Properties:\n{}", stringWriter.toString());
}
Ответ 6
Лучший ответ содержит небольшую ошибку: строка:
PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config);
Должен быть заменен:
PropertiesConfigurationLayout layout = config.getLayout();
Ответ 7
Я когда-то видел класс для этого с INI файлами, но больше не могу найти ссылку. Если вы ничего не можете найти, вы можете попробовать DecentXML. Я написал этот синтаксический анализатор XML с конкретной целью дизайна, чтобы сохранить исходное форматирование на 100% (т.е. С комментариями, странными пространствами в элементах или вокруг корневого элемента, все).
Во время разбора результирующего XML-документа вам просто нужно запомнить элементы, которые содержат значение для ваших параметров, и заменить текст node на них. Когда вы сохраните, ничто не тронутое каким-либо образом изменится.