Java解析嵌套的conf文件

Java解析嵌套的conf文件,java,parsing,configuration,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方法获取公司属性值 请帮我做这个 谢谢 使用不同值的相同属性名没

我有一个配置文件:

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方法获取公司属性值

请帮我做这个


谢谢

使用不同值的相同属性名没有什么错,但是
getProperty(字符串键)
无法区分它们,因为它将返回第一个值

第二,您不能直接访问嵌套属性。此时
getProperty
将返回整个
String
包括
{}
作为值,因为这是您的值所包含的内容。您可以获取值并执行一些操作来从整个
字符串中获取值。因为属性文件应该只有
key=value
格式意味着左手边应该是键,右手边应该是值。就是这样


如果您想按照您在代码中指定的格式存储值,那么您应该选择格式,这样您就可以将整个
JSON
数据存储到文件中,并在您想使用它时从文件中取回它。

使用不同值的相同属性名,但
getProperty(字符串键)没有错
无法区分它们,因为它将返回第一个值

第二,您不能直接访问嵌套属性。此时
getProperty
将返回整个
String
包括
{}
作为值,因为这是您的值所包含的内容。您可以获取值并执行一些操作来从整个
字符串中获取值。因为属性文件应该只有
key=value
格式意味着左手边应该是键,右手边应该是值。就是这样


如果您想按照您在代码中指定的格式存储值,那么您应该选择格式,这样您就可以将整个
JSON
数据存储到文件中,并在您想使用它时从文件中取回它。

使用不同值的相同属性名,但
getProperty(字符串键)没有错
无法区分它们,因为它将返回第一个值

第二,您不能直接访问嵌套属性。此时
getProperty
将返回整个
String
包括
{}
作为值,因为这是您的值所包含的内容。您可以获取值并执行一些操作来从整个
字符串中获取值。因为属性文件应该只有
key=value
格式意味着左手边应该是键,右手边应该是值。就是这样


如果您想按照您在代码中指定的格式存储值,那么您应该选择格式,这样您就可以将整个
JSON
数据存储到文件中,并在您想使用它时从文件中取回它。

使用不同值的相同属性名,但
getProperty(字符串键)没有错
无法区分它们,因为它将返回第一个值

第二,您不能直接访问嵌套属性。此时
getProperty
将返回整个
String
包括
{}
作为值,因为这是您的值所包含的内容。您可以获取值并执行一些操作来从整个
字符串中获取值。因为属性文件应该只有
key=value
格式意味着左手边应该是键,右手边应该是值。就是这样


如果要按照代码中指定的格式存储值,则应选择格式,这样就可以将整个
JSON
数据存储到文件中,并在使用时从文件中取回。

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

{company=My Company, age=22, user={, name="Jack", }=, num_users=3}
出于这个原因,您可以参考javaDoc以获取Properties类的“publicvoidload(Reader)”方法

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

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
}

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

{company=My Company, age=22, user={, name="Jack", }=, num_users=3}
出于这个原因,您可以参考javaDoc以获取Properties类的“publicvoidload(Reader)”方法

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

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
}

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

{company=My Company, age=22, user={, name="Jack", }=, num_users=3}
出于这个原因,您可以参考javaDoc以获取Properties类的“publicvoidload(Reader)”方法

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

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
}

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

{company=My Company, age=22, user={, name="Jack", }=, num_users=3}
出于这个原因,您可以参考javaDoc以获取Properties类的“publicvoidload(Reader)”方法

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

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
}

共享代码以获得快速帮助。为什么您认为
Properties
适用于此格式?
Properties
不支持嵌套。共享代码以获得快速帮助。为什么您认为
Properties
适用于此格式?
Properties
不支持嵌套。共享代码以获得快速帮助帮助。为什么您认为
Properties
适用于此格式?
Properties
不支持嵌套。请共享您的代码以获得快速帮助。为什么您认为
Properties
适用于此格式