Я работаю над личным проектом, который использует настраиваемый файл конфигурации. Основной формат файла выглядит следующим образом:Каков наилучший способ проанализировать этот файл конфигурации?
[users]
name: bob
attributes:
hat: brown
shirt: black
another_section:
key: value
key2: value2
name: sally
sex: female
attributes:
pants: yellow
shirt: red
Там может быть произвольное количество пользователей, и каждый из них может иметь разные пары ключ/значение и могут быть вложены ключи/значения при разделе с помощью вкладки-стопы. Я знаю, что я могу использовать json, yaml или даже xml для этого файла конфигурации, однако я бы хотел сохранить его на заказ.
Анализ не должен быть сложным, поскольку я уже написал код для его анализа. Мой вопрос заключается в том, как лучше всего разобрать синтаксический анализ, используя чистый и структурированный код, а также запись таким образом, чтобы в будущем не было изменений в будущем (в будущем может быть несколько гнезд) , Прямо сейчас, мой код выглядит совершенно отвратительным. Например,
private void parseDocument() {
String current;
while((current = reader.readLine()) != null) {
if(current.equals("") || current.startsWith("#")) {
continue; //comment
}
else if(current.startsWith("[users]")) {
parseUsers();
}
else if(current.startsWith("[backgrounds]")) {
parseBackgrounds();
}
}
}
private void parseUsers() {
String current;
while((current = reader.readLine()) != null) {
if(current.startsWith("attributes:")) {
while((current = reader.readLine()) != null) {
if(current.startsWith("\t")) {
//add user key/values to User object
}
else if(current.startsWith("another_section:")) {
while((current = reader.readLine()) != null) {
if(current.startsWith("\t")) {
//add user key/values to new User object
}
else if (current.equals("")) {
//newline means that a new user is up to parse next
}
}
}
}
}
else if(!current.isEmpty()) {
//
}
}
}
Как вы можете видеть, код довольно грязный, и я сократил его для презентации здесь. Я чувствую, что есть лучшие способы сделать это, возможно, не используя BufferedReader. Может ли кто-нибудь, возможно, предоставить лучший способ или подход, который не так запутан, как мой?
Я просто добавлю это как комментарий, так как я не отвечаю на ваш вопрос относительно этой конфигурации конфигурации. Поскольку это личный проект, можно ли изменить его на нечто вроде XML? Тогда вы можете использовать что-то вроде JAXP. – JBirch
Что это такое с разработчиками Java и XML? Предложение Cletus YAML - это место, потому что это то, что больше похоже на конфигурацию OP. Вы бы это знали, если бы вы расширили горизонты через Ruby on Rails или даже в PHP-инфраструктуру Symfony. Я тоже разработчик Java, и эта постоянная зависимость от XML большинством других разработчиков Java находится где-то между комическим и жалким. Я когда-то показал структуру микро MVC, которую я разработал для Java-архитектора, и он заметил «Where's mapping», которым он имел в виду XML. Лучший вопрос: почему нельзя использовать другие форматы для заполнения карт (ping)? –
В нескольких комментариях вы указываете, что скобки, скобки, кавычки и т. Д. Стандартных форматов слишком много беспорядка. Я просто хотел указать, что есть веская причина для этого «беспорядка». В настоящее время вы зависите от вкладок, которые действительно хрупкие. Что происходит, когда кто-то открывает файл конфигурации в том, что преобразует вкладки в пробелы? Минимально вы также должны поддерживать пробелы. –