Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道属性文件中是否存在属性?_Java - Fatal编程技术网

Java 如何知道属性文件中是否存在属性?

Java 如何知道属性文件中是否存在属性?,java,Java,如何知道java中的属性文件中是否存在属性?根据,getProperty()如果未找到属性,则返回null。您也可以调用propertyNames()或stringPropertyNames(),查看感兴趣的属性名称是否在返回的集合中。只需加载属性文件,然后尝试获取所需的属性 public String getProperty(String key) 在此属性列表中搜索具有指定键的属性。如果在此属性列表中找不到该键,则会递归地检查默认属性列表及其默认值如果找不到属性,则该方法返回null。

如何知道java中的属性文件中是否存在属性?

根据,
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")