Файл Config.yml и комментарии

  • Автор темы Автор темы ms2008
  • Дата начала Дата начала

ms2008

Активный участник
Баллы
61
Здравствуйте. Есть такой файл конфигурации:
YAML:
# Тестовая числовая переменная 1
testIntVar1: 10

# Тестовая строковая переменная 1
testStringVar1: 'Test1'

# Тестовая числовая переменная 2
testIntVar2: 20

# Тестовая строковая переменная 2
testStringVar2: 'Test2
Cчитываю значения в переменные:
Код:
static FileConfiguration config;
static int test_int1; static int test_int2;
static String test_string1; static String test_string2;

config = this.getConfig();
test_int1 = this.getConfig().getInt("testIntVar1");
test_int2 = this.getConfig().getInt("testIntVar2");
test_string1 = this.getConfig().getInt("testStringVar1");
test_string2 = this.getConfig().getInt("testStringVar2");
Далее меняю какой-либо параметр, и сохраняю конфиг, например:
Java:
test_int1 = 15; config.set("testIntVar1", (Object)15);
test_string2 = "Test25"; config.set("testStringVar2", (Object)"Test25");
this.saveConfig();
В результате файл конфига перезаписывается, и все комментарии естественно удаляются. Получается так:
YAML:
testIntVar1: 15
testStringVar1: Test1
testIntVar2: 20
testStringVar2: Test25
Возможно ли изменять файл конфига таким образом, чтоб не "слетали" комментарии? Чтоб перезаписывались только отдельные строки файла, а не весь файл?
 
SnakeYAML игнорирует все комментарии в файлах. Пишите свой парсер.
 
Здравствуйте. Есть такой файл конфигурации:
YAML:
# Тестовая числовая переменная 1
testIntVar1: 10

# Тестовая строковая переменная 1
testStringVar1: 'Test1'

# Тестовая числовая переменная 2
testIntVar2: 20

# Тестовая строковая переменная 2
testStringVar2: 'Test2
Cчитываю значения в переменные:
Код:
static FileConfiguration config;
static int test_int1; static int test_int2;
static String test_string1; static String test_string2;

config = this.getConfig();
test_int1 = this.getConfig().getInt("testIntVar1");
test_int2 = this.getConfig().getInt("testIntVar2");
test_string1 = this.getConfig().getInt("testStringVar1");
test_string2 = this.getConfig().getInt("testStringVar2");
Далее меняю какой-либо параметр, и сохраняю конфиг, например:
Java:
test_int1 = 15; config.set("testIntVar1", (Object)15);
test_string2 = "Test25"; config.set("testStringVar2", (Object)"Test25");
this.saveConfig();
В результате файл конфига перезаписывается, и все комментарии естественно удаляются. Получается так:
YAML:
testIntVar1: 15
testStringVar1: Test1
testIntVar2: 20
testStringVar2: Test25
Возможно ли изменять файл конфига таким образом, чтоб не "слетали" комментарии? Чтоб перезаписывались только отдельные строки файла, а не весь файл?
Если лень писать парсер - выводите используемые вами переменные в отдельный .yml файл.
 
Если лень писать парсер - выводите используемые вами переменные в отдельный .yml файл.
Возможно Вы правы, из-за 10 переменных писать парсер не хочется. Думал, что SnakeYAML может работать с комментариями. Проще написать отдельный help-файл. Спасибо всем за советы.
 
Конфиг - 1 файл
Данные - второй файл
Вот и решение
this.saveConfig(); - zlo
 
Я чего-то не знаю? Обьясни почему это зло)
И как будешь обьяснять, напиши как правильно :)
Я, у себя в плагинах предпочитаю использовать config.yml исключительно для чтения, но не для записи
Как минимум по причинам из за которых была создана эта тема.

Данные же лучше хранить в отдельном файле или вообще БД.
 
Я, у себя в плагинах предпочитаю использовать config.yml исключительно для чтения, но не для записи
Как минимум по причинам из за которых была создана эта тема.

Данные же лучше хранить в отдельном файле или вообще БД.
А в JSON файлах возможно можно перезаписывать какие-либо переменные?

P.S сам использую конфиги только для чтения :)
Для записи либо отдельный yml файл, либо база данных)
 
Yaml для меня идеально подходит для конфигурирования настроек. В теле плагина в конфиге по умолчанию расставляю комментарии, на страницах с описаниями плагина даю ссылки на этот файл сразу на GitHub-е. Получается, что существует только одно место для документации настроек плагина, до которого всегда легко добраться.
Json — для таких данных, которых многовато и они скорее всего никогда не будут редактироваться руками.
MySQL — когда данные длительны во времени, их очень много или они нужны на нескольких серверах сразу.
 
А в JSON файлах возможно можно перезаписывать какие-либо переменные?

P.S сам использую конфиги только для чтения :)
Для записи либо отдельный yml файл, либо база данных)
В теории да, но зачем?
Обычно все придерживаются стиля файл-объект и куда проще просто обновить поле в памяти а затем сериализировать по новой.
Json — для таких данных, которых многовато и они скорее всего никогда не будут редактироваться руками.
JSON намного приятнее в редактировании чем YAML. Просто не нотпадом
 
MongoDB — когда данные длительны во времени, структура свобода к изменениям, вы хотите иметь возможность вообще никогда не трогать бд руками, не задумываться о структуризации таблиц, они нужны на нескольких серверах сразу и если вы хотите иметь возможность удобно работать с данными используя мощнейший JS вместо SQL
 
В теории да, но зачем?
Обычно все придерживаются стиля файл-объект и куда проще просто обновить поле в памяти а затем сериализировать по новой.

JSON намного приятнее в редактировании чем YAML. Просто не нотпадом
Yaml для меня идеально подходит для конфигурирования настроек. В теле плагина в конфиге по умолчанию расставляю комментарии, на страницах с описаниями плагина даю ссылки на этот файл сразу на GitHub-е. Получается, что существует только одно место для документации настроек плагина, до которого всегда легко добраться.
Json — для таких данных, которых многовато и они скорее всего никогда не будут редактироваться руками.
MySQL — когда данные длительны во времени, их очень много или они нужны на нескольких серверах сразу.
Весьма исчерпывающе. Спасибо.
 
Возможно Вы правы, из-за 10 переменных писать парсер не хочется. Думал, что SnakeYAML может работать с комментариями. Проще написать отдельный help-файл. Спасибо всем за советы.
Закидываешь готовый config.yml в jar плагина, в onEnable - this.saveDefaultConfig() . Профит.
Правда, не на всех ядрах конфиги с non-ascii символами выгружаются корректно.
 
Назад
Верх