Метод магазина ini4j изменяет символ комментария

Я хочу изменить запись ключа в разделе INI-файла. Я использую библиотеку ini4j. Поэтому я написал код ниже. Я могу изменить запись, но есть и другие изменения, которые я не хочу:

  • замена ";" со знаком "#", который обозначает строки комментариев
  • добавление пустых строк между разделами и комментариями

Так как я могу решить это?

это то, что я ожидал:

[section1]
key1=40
key2=30
[section2]
key1=10
key2=20
;section3
[section3]
key1=10
key2=20

это файл после редактирования:

[section1]
key1=40
key2=30

[section2]
key1=10
key2=20

#section3

[section3]
key1=10
key2=20

Мой код:

public static void setEntry(String filePath, String fileName, String sectionName, String keyName, String entry)
        throws IOException {
    String path = filePath.concat(fileName);
    FileInputStream inputStream = null;
    try {
        inputStream = new FileInputStream(path);
        Ini ini = new Ini(inputStream);
        ini.getConfig().setStrictOperator(true);
        Section section = ini.get(sectionName);
        if (section != null) {
            if (section.containsKey(keyName)) {
                section.put(keyName, entry);
            }
            else {
                section.add(keyName, entry);
            }
        }
        else {
            section = ini.add(sectionName);
            section.add(keyName, entry);
        }

        File iniFile = new File(path);
        ini.store(iniFile);
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        inputStream.close();
    }
}

Есть ли способ изменить символ комментария по умолчанию?

1 ответ

Видимо, даже когда ini4j может читать комментарии с ; а также #, он не сохраняет это, когда вы должны записать их в INI-файл.

Если вы проверите AbstractFormatter класс проекта ini4j, вы можете видеть, что единственный оператор комментария, который имеет значение, когда пишет # Если у вас есть доступ к исходному коду, вы можете изменить его с помощью своего пользовательского оператора комментариев, и он должен работать.

abstract class AbstractFormatter implements HandlerBase
{
    private static final char OPERATOR = '=';
    private static final char COMMENT = '#';    // <--- change this to ';'
    ...

Что касается пустых строк, они просто эстетика. Опять же, если у вас есть доступ к исходному коду, вы можете отредактировать его самостоятельно (комментируя эту и эту строки?), Но я полагаю, это проще, если вы просто переформатируете свой INI-файл после создания этой библиотекой и удалите все пустые линий.

Другие вопросы по тегам