【问题标题】:Print system property name if property not found in property file如果在属性文件中找不到属性,则打印系统属性名称
【发布时间】:2012-07-31 05:48:23
【问题描述】:

我有 2 个属性文件:

application.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。

【问题讨论】:

  • 你的问题我不清楚。 app.property 到底是什么?属性文件?系统属性?属性在哪里定义,在哪里初始化?

标签: java properties jvm


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    只需从 System 类中获取属性:

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

    【讨论】:

    • 这是在启动应用程序时完成的。我想在应用程序启动并工作后知道“app.property”。 Java.util.Properties 类没有提供太多信息来获取“app.property”的名称。
    • 抱歉,我不确定我是否完全了解这个问题。你能解释一下吗?
    • @qrtt1 这里不清楚你想要实现什么。您是要检索一组属性键的值并将它们打印到文件中,还是要检查一组属性键的值。
    • 如果getProperty返回null,我想打印文件名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2015-08-17
    • 2015-10-23
    • 2013-11-15
    • 2014-07-29
    • 2016-06-01
    相关资源
    最近更新 更多