Java 如何知道属性文件中是否存在属性?
如何知道java中的属性文件中是否存在属性?根据,Java 如何知道属性文件中是否存在属性?,java,Java,如何知道java中的属性文件中是否存在属性?根据,getProperty()如果未找到属性,则返回null。您也可以调用propertyNames()或stringPropertyNames(),查看感兴趣的属性名称是否在返回的集合中。只需加载属性文件,然后尝试获取所需的属性 public String getProperty(String key) 在此属性列表中搜索具有指定键的属性。如果在此属性列表中找不到该键,则会递归地检查默认属性列表及其默认值如果找不到属性,则该方法返回null。
getProperty()
如果未找到属性,则返回null
。您也可以调用propertyNames()
或stringPropertyNames()
,查看感兴趣的属性名称是否在返回的集合中。只需加载属性文件,然后尝试获取所需的属性
public String getProperty(String key)
在此属性列表中搜索具有指定键的属性。如果在此属性列表中找不到该键,则会递归地检查默认属性列表及其默认值如果找不到属性,则该方法返回null。
getProperty(字符串键,字符串默认值)
并检查返回值是否为defaultValue
请参见以下是一些技巧,如何确定类路径中是否存在某个文件(非强制属性文件)
public class FileUtil {
public static boolean isFileExists(String fileName){
return null != FileUtil.class.getResourceAsStream(fileName);
}
}
当然,只要它依赖于类加载方面,它就不会一直工作。另一种选择是利用
属性扩展哈希表的事实,并使用containsKey
如果您想在程序开始时检查是否可以执行以下操作:
创建扩展属性的类VerifiedProperties
将所有属性作为此类的字段添加为public final int/String/boolean/etc.
将private final String propertyNotValid=“Property not valid”
String添加到此类
将private final String propertyNotFound=“Property not found”
String添加到此类
重写Properties类中的getProperty()
方法
您可以添加@Deprecated
标记来建议字段的使用。无法隐藏此方法,因为它在Properties类中是公共的
使用getProperty()
方法或专用于类型初始化构造函数中的所有字段(参见下面的示例)
处理不同属性类型的示例方法:
然后您可以在某处创建:
公共静态验证属性
并将所需的属性用作properties.myProperty
优势:
- 您可以完全控制属性,包括异常处理和空检查
- 如果属性不存在或格式不正确,您将在程序初始化时获得该信息
- 您不必担心在代码中将属性解析为不同于字符串的类型
- 您可以将验证器添加到
字符串
属性中
- 您可以轻松地重构属性名
- 如果您使用的外部属性文件可以由应用程序外部的用户修改,如果提供的更改不正确或缺少字段,您的程序将不会启动
缺点:
- 对于每个属性,除了向
*.properties
文件添加值之外,还需要在构造函数中创建字段并赋值。如果你有很多属性,那么这个文件看起来会很不舒服
提示:
- 如果字段的名称与属性文件中的名称相同,则更容易保存文件
- (Netbeans)您可以
切换矩形选择
以添加公共最终字符串
,类似于一次添加多行
- (Netbeans)保持
*.properties
文件清洁,您可以使用
crazyscot的答案现在已经过时了。根据最新消息,如果不存在该属性,则该属性将被创建
“如果没有当前的系统属性集,则首先以与getProperties方法相同的方式创建和初始化一组系统属性”
您可以使用hasProperty
AllValues.hasProperty("childList")
在我的调试器或javadoc 7或8中没有看到该方法。通过groovy在Java8中这对我不起作用。我不确定它是否能在纯java中工作either@PeterKahn它确实有效。如果属性设置为默认值会怎么样?这不是一种安全的方法。您可以将defaultValue
设置为在特定域中无效的值,例如:###占位符##
AllValues.hasProperty("childList")