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
适用于此格式