解析属性文件

时间:2016-03-13 09:48:41

标签: java parsing properties-file

我正在尝试解析具有以下格式的Properties文件:

CarModel=Prius
CarMake=Toyota
Option1=Transmission
OptionValue1a=Manual
OptionValue1b=Automatic
Option2=Brakes
OptionValue2a=Regular
OptionValue2b=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");

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

2 个答案:

答案 0 :(得分:1)

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

我正在尝试解析具有以下格式的Properties文件:

CarModel: Prius
CarMake: Toyota
Transmission:
  - Manual
  - Automatic
Brakes:
  - Regular
  - ABS

使用SnakeYAML可以

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

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

答案 1 :(得分:1)

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

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("[|]");
}

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