Подтвердить что ты не робот

Лучший класс для обновления файлов свойств?

Хотя java.util.properties позволяет читать и записывать свойства файла, запись не сохраняет форматирование. Не удивительно, потому что он не привязан к файлу свойств.

Есть ли класс PropertyFile - или какой-то такой - который сохраняет комментарии и пустые строки и обновляет значения свойств на месте?

4b9b3361

Ответ 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 на них. Когда вы сохраните, ничто не тронутое каким-либо образом изменится.