我正在使用自定义配置文件的个人项目。该文件的基本格式看起来像这样:解析这个配置文件的最好方法是什么?
[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作为这个配置文件,但是,我想现在保留它的自定义。
解析应该不难,因为我已经编写了代码来解析它。我的问题是,使用clean和结构化解析此代码以及以不会使未来变化变得困难的方式进行解析的最佳方法是什么(未来可能会有多种巢) 。现在,我的代码看起来非常恶心。例如,
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 2010-08-17 00:27:33
基督与Java开发人员和XML有什么关系? Cletus对YAML的建议很有用,因为这是OP的配置看起来最像的。如果您通过Ruby on Rails或甚至PHP架构Symfony扩展自己的视野,您将会了解这一点。我也是一名Java开发人员,大多数其他Java开发人员对XML的持续依赖处于滑稽和可悲之间。我曾经展示过一个我开发给Java“架构师”的微MVC框架,并且他评论说“映射在哪里”,他指的是XML。更好的问题:为什么不能使用其他格式填充地图(ping)? – 2010-08-17 00:50:32
在一些评论中,您声明标准格式的大括号,括号,引号等都太杂乱无章。我只想指出,这种“混乱”有一个很好的理由。目前,您正在依赖选项卡,这非常脆弱。当某人打开配置文件将标签转换为空格时会发生什么?最小限度地,你应该支持那里的空间。 – 2010-08-17 01:28:25