Java属性文件验证

时间:2017-06-14 08:34:18

标签: java properties properties-file

我的Java应用程序在启动时加载属性文件,其中包含键值对。我可以成功设置和检索预期的属性。

但是,就目前而言,属性文件可以包含我要放在那里的任何属性名称。我希望能够将属性限制为特定集合,其中一些是强制性的,另一些是可选的。

我可以针对有效集合手动检查每个已加载的属性,但我想知道是否有更优雅的方法来执行此操作。例如。也许某种方式来声明预期的强制/可选属性,以便在加载属性文件时,如果检测到无效或缺失属性,则抛出异常。类似于boost::program_options在C ++中提供的东西。

2 个答案:

答案 0 :(得分:3)

由于Properties已经是一个简单的可迭代结构,我只会针对该对象执行验证。以下是必需与可选的简单验证。

public static void testProps(Properties props, Set<String> required, Set<String> optional) {
    int requiredCount=0;
    Enumeration keys = props.keys();
    while (keys.hasMoreElements()) {
        String key=(String) keys.nextElement();
        if (required.contains(key)) {
            requiredCount++;
        } else if (!optional.contains(key)) {
            throw new IllegalStateException("Unauthorized key : " + key);
        }
    }
    if (requiredCount<required.size()) {
        for (String requiredKey : required) {
            if (!props.containsKey(requiredKey)) {
                throw new IllegalStateException("Missing required key : " + requiredKey);
            }
        }
    }
}

答案 1 :(得分:1)

  

我可以针对有效集合手动检查每个已加载的属性但是我   我想知道是否有更优雅的方式来做到这一点。例如。也许   某种方式来声明预期的强制/可选属性,所以   加载属性文件时,如果是,则抛出异常   检测到无效或缺失属性。

JDK的内置API(java.util.Properties)不提供此类验证。

然而,实现这一目标并不难实现你自己的ConfigLoader类。您的类可以包装java.util.Properties,并在加载后验证数据。例如,您可以维护一个强制键和可选键列表(硬编码或外部加载),然后根据这些列表检查加载键的列表。

你可能会找到一些实现这一点的实现,但是因为验证本身无论如何都将特定于你的需求,其余的相当简单,我认为不值得寻找现有的解决方案。