如果在属性文件中找不到属性,则打印系统属性名称

时间:2012-07-31 05:48:24

标签: java properties jvm

我有2个属性文件:

application.properties config.properties

这两个fiels都包含属性。

我通过在IBM websphere服务器中设置系统属性来加载这些fiel的属性。

在应用程序启动期间,这两个文件中的所有属性都通过ApplicationProperty.java类加载。

private static Properties applicationProperties = new Properties();

 readPropertyFileOne(...){  
properties.load(new FileInputStream(propertiesLocationOne));
}

readPropertyFileTwo(...){  
    properties.load(new FileInputStream(propertiesLocationTwo));
}

现在应用程序启动后,读取两个文件中的所有属性。如果我试图通过此代码访问文件中的任何属性

findNonNullableProperty(String aPropertyName){
        String value = properties.getProperty(aPropertyName);
        if(value == null){
        //print system property name here. Name can be propertiesLocationOne or propertiesLocationTwo. But what is that? I want to know file location.
        }
    }

并返回null。

2 个答案:

答案 0 :(得分:1)

更新:在再次评估您的问题后,我理解这一点:您希望从您自己的属性类中获取属性值。如果属性值返回null,您想知道哪个属性文件包含密钥并打印出属性文件的名称。

答案是你不能这样做。如果您读取属性类的javadoc,那么只有在放入未知密钥时,get(“KEY_NAME”)方法才会返回null。对于空值,您将获得一个空字符串“”。由于密钥未知,因此它不能位于您的任何一个文件中。您无法确定要打印的文件名(或者您必须同时打印这两个文件名)。

如果要对空字符串(“”)执行此操作,则必须在自己的属性类中添加更多信息。 java.util.Properties类使用哈希映射来存储键值对。从文件加载对后,文件的名称不再可用。所以你需要在某个地方存储文件名。

下一个问题是您将两个文件中的密钥加载到一个哈希映射中。进入表格后,您无法确定他们在哪个文件中读取。两种可能的解决方案:

  1. 您将文件名添加到密钥中:如果您在属性文件本身中执行此操作,则很容易,但您必须知道文件名才能获取该值。
  2. 您为每个文件保留一个属性:然后当有人询问某个值时,您必须查看这两个属性。但是,这可以包装在Property类中,因此用户不知道这一点。

答案 1 :(得分:0)

从System类获取属性:

public class PrintPropery {
    public static void main(String[] args) {
        System.out.println(System.getProperty("app.property"));
    }
}