我有一个配置文件:
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 方法获取公司属性值。
请帮助我。
谢谢!
答案 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
}