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

标签 java properties jvm

我有 2 个属性文件:

应用程序属性 配置.属性

这两个字段都包含属性。

我通过在 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。

最佳答案

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

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

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

下一个问题是将两个文件中的 key 加载到一个 HashMap 中。一旦进入表中,您就无法决定它们从哪个文件中读取。两种可能的解决方案:

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

关于java - 如果在属性文件中找不到属性,则打印系统属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11733903/

相关文章:

java - Biojava 示例运行时出现 ExceptionInInitializerError

java - 为什么 json 字符串以不同的格式到达 Restful 服务?

c# - 为什么 C# Type.GetProperty() 对接口(interface)的行为与对基类的行为不同?

用于访问 COM 对象属性的 C++ 包装函数(宏)

c++ - 链接器和图书馆员中的 VC++ 2012 Additional Dependencies 选项

java - 持久化 Java Bean

java - 从列表中删除、添加和使用项目

java - jirutka/rsql-解析器 : How to define an operator that has no argument?(=空=,=notEmpty=)

java - 如何在 Java 中检测发起 HTTP 请求的平台

Cassandra:指定的堆栈大小太小,指定至少228k