Java解析嵌套的conf文件

时间:2014-08-02 04:56:44

标签: java parsing configuration

我有一个配置文件:

company=My Company
num_users=3

user={
  name="John"
  age=24
}

user={
  name="Anna"
  age=27
}

user={
  name="Jack"
  age=22
}

我试图使用Java解析此配置文件。我尝试了 java.util.Properties ,但我不知道如何获取每个用户数据。

我仍然可以使用 getProperty 方法获取公司属性值。

请帮助我。

谢谢!

2 个答案:

答案 0 :(得分:2)

使用具有不同值的相同属性名称没有错,但getProperty(String key)无法区分它们,因为它将返回第一个值。

其次,您无法直接访问嵌套属性。现在getProperty现在将返回整个String,包括{}作为值,因为这是您的值所包含的内容。您可能会获得价值并执行某些操作从整个String获取值的操作。因为属性文件应该只有key=value格式意味着左侧应该是键,右侧应该是值。就是这样。

如果您想要存储代码中指定的值,则应使用JSON格式,而不是将整个JSON数据存储到文件中,并在需要时将其从文件中取回用它。

答案 1 :(得分:1)

如果使用java.util.Properties类加载配置文件,您将得到以下结果:

{company=My Company, age=22, user={, name="Jack", }=, num_users=3}

原因,你可以参考javaDoc for Properties class的“public void load(Reader reader)”方法。

由于您没有描述配置文件的详细语法格式, 根据您的示例输入,以下示例代码可以正确地检索name = value:

String reg="(\\w+)\\s*=\\s*((?>\\{[^\\{\\}]*\\})|(?>.*$))";
Pattern pMod = Pattern.compile(reg, Pattern.MULTILINE);
Matcher mMod = pMod.matcher(line);
while (mMod.find()) {
    System.out.println(mMod.group(1));
    System.out.println(mMod.group(2));
}

输出结果为:

company
My Company
num_users
3
user
{
  name="John"
  age=24
}
user
{
  name="Anna"
  age=27
}
user
{
  name="Jack"
  age=22
}