0

我有 2 个属性文件:

应用程序.properties 配置.properties

这两个字段都包含属性。

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

在应用程序启动期间,这两个文件中的所有属性都是通过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。

4

2 回答 2

1

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

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

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

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

  1. 您将文件名添加到键中:如果您在属性文件本身中执行此操作很容易,但是您必须知道文件名才能获取值。
  2. 您为每个文件持有一个属性:然后当有人询问值时,您必须查看这两个属性。但是,这可以包含在您的 Property 类中,因此用户不知道这一点。
于 2012-07-31T06:55:18.470 回答
0

只需从 System 类中获取属性:

public class PrintPropery {
    public static void main(String[] args) {
        System.out.println(System.getProperty("app.property"));
    }
}
于 2012-07-31T06:26:54.900 回答