Java 解析属性文件

Java 解析属性文件,java,parsing,properties-file,Java,Parsing,Properties File,我正在尝试分析具有以下格式的属性文件: CarModel=Prius CarMake=Toyota Option1=Transmission OptionValue1a=Manual OptionValue1b=Automatic Option2=Brakes OptionValue2a=Regular OptionValue2b=ABS CarModel: Prius CarMake: Toyota Transmission: - Manual - Automatic Brakes:

我正在尝试分析具有以下格式的属性文件:

CarModel=Prius
CarMake=Toyota
Option1=Transmission
OptionValue1a=Manual
OptionValue1b=Automatic
Option2=Brakes
OptionValue2a=Regular
OptionValue2b=ABS
CarModel: Prius
CarMake: Toyota
Transmission:
  - Manual
  - Automatic
Brakes:
  - Regular
  - ABS
我的问题是,如果有各种形式的属性文件怎么办?例如,如果一个属性文件具有选项1的3个选项,而另一个属性文件具有选项1的2个选项,该怎么办?现在,我的代码如下所示:

Properties props = new Properties();
FileInputStream x = new FileInputStream(filename);
props.load(x);

String carModel = props.getProperty("CarModel");
if(!carModel.equals(null)){
    String carMake = props.getProperty("CarMake");
    String option1 = props.getProperty("Option1");
    String option1a = props.getProperty("OptionValue1a");
    String option1b = props.getProperty("OptionValue1b");

等等。我想我需要很多“如果”语句,但我不确定如何实现它们。有什么想法吗?

您确定要使用属性文件吗?我建议使用YAML

我正在尝试分析具有以下格式的属性文件:

CarModel=Prius
CarMake=Toyota
Option1=Transmission
OptionValue1a=Manual
OptionValue1b=Automatic
Option2=Brakes
OptionValue2a=Regular
OptionValue2b=ABS
CarModel: Prius
CarMake: Toyota
Transmission:
  - Manual
  - Automatic
Brakes:
  - Regular
  - ABS
使用SnakeYAML,您可以

Map<String, Object> car = (Map) new Yaml().load(new FileReader(filename));
Map car=(Map)new Yaml().load(new FileReader(filename));

请注意,以
-
开头的行将变成一个列表。

是否确实要使用属性文件?我建议使用YAML

我正在尝试分析具有以下格式的属性文件:

CarModel=Prius
CarMake=Toyota
Option1=Transmission
OptionValue1a=Manual
OptionValue1b=Automatic
Option2=Brakes
OptionValue2a=Regular
OptionValue2b=ABS
CarModel: Prius
CarMake: Toyota
Transmission:
  - Manual
  - Automatic
Brakes:
  - Regular
  - ABS
使用SnakeYAML,您可以

Map<String, Object> car = (Map) new Yaml().load(new FileReader(filename));
Map car=(Map)new Yaml().load(new FileReader(filename));

请注意,以
-
开头的行被转换为一个列表。

如果您必须坚持使用属性,我建议将列表放在属性中

CarModel=Prius
CarMake=Toyota
Options=Transmission Manual|Automatic,\
  Brakes Regular|ABS
通过这种方式,您可以阅读以下选项

String options = prop.getProperty("Options");
for(String option : options.split("\\s*,\\s*")) {
    String[] parts = option.split("\\s+");
    String optionType = parts[0];
    String[] optionChoices = parts[1].split("[|]");
}

通过这种方式,您可以拥有任意数量的选项和任意数量的选项。

如果您必须坚持使用属性,我建议将列表放在属性中

CarModel=Prius
CarMake=Toyota
Options=Transmission Manual|Automatic,\
  Brakes Regular|ABS
通过这种方式,您可以阅读以下选项

String options = prop.getProperty("Options");
for(String option : options.split("\\s*,\\s*")) {
    String[] parts = option.split("\\s+");
    String optionType = parts[0];
    String[] optionChoices = parts[1].split("[|]");
}

这样,您就可以拥有任意数量的选项和任意数量的选项。

可能会对您有所帮助吗?请澄清要求。这是否意味着具有多个值的属性将始终看起来像
PropertyName+Number
?或者您是否可以自由选择多值属性文件的外观?是否可以帮助您?请澄清要求。这是否意味着具有多个值的属性将始终看起来像
PropertyName+Number
?或者您可以自由选择多值属性文件的外观吗?只是好奇。。
down vote favorite
是什么意思?是错了吗?@Yazan是的,我从问题中抄了太多的文字。不行,这是作业。说明中特别提到使用属性文件。@Brian属性文件不适合列表。只是好奇。。
down vote favorite
是什么意思?是错了吗?@Yazan是的,我从问题中抄了太多的文字。不行,这是作业。说明特别说明使用属性文件。@Brian属性文件不适合列表。