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

时间:2010-05-27 09:46:14

标签: java

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

8 个答案:

答案 0 :(得分:11)

根据http://java.sun.com/javase/6/docs/api/java/util/Properties.html,如果找不到该属性,则getProperty()会返回null。您也可以致电propertyNames()stringPropertyNames(),并查看感兴趣的媒体资源名称是否在返回的集合中。

答案 1 :(得分:10)

另一种选择是利用Properties extends Hashtable<Object,Object>和使用containsKey

这一事实

答案 2 :(得分:4)

只需加载属性文件,然后尝试获取所需的属性。

public String getProperty(String key)
  

在此属性列表中搜索具有指定键的属性。如果在此属性列表中找不到该键,则会检查默认属性列表及其默认值(递归)。 如果找不到该属性,则该方法返回null。

答案 3 :(得分:3)

您可以使用hasProperty

AllValues.hasProperty("childList")

答案 4 :(得分:1)

您也可以致电getProperty(String key, String defaultValue)并检查默认值。

http://java.sun.com/javase/6/docs/api/java/util/Properties.html#getProperty(java.lang.String,java.lang.String)

答案 5 :(得分:1)

如果您想在程序开始时检查,可以执行以下操作:

  1. 创建一个扩展VerifiedProperties
  2. 的班级Properties
  3. 将所有属性添加为此类的字段public final int/String/boolean/etc...
  4. private final String propertyNotValid="Property not valid"字符串添加到此类
  5. private final String propertyNotFound="Property not found"字符串添加到此类
  6. 覆盖属性类中的getProperty()方法。
  7. 您可以添加@Deprecated标记来建议字段的使用。隐藏此方法是不可能的,因为它在Properties类中是公共的。
  8. 使用getProperty()方法初始化构造函数中的所有字段或专用于类型(请参阅下面的示例)
  9. 处理不同属性类型的示例方法:

    @Override
    @Deprecated
    /*
     Deprecated annotation added to suggest usage of the fields.
     */
    public final String getProperty(String key)
    {
        String propertyValue = super.getProperty(key);
        if (propertyValue != null)
        {
            return propertyValue;
        }
        else
        {
            throw new NoSuchFieldError(this.propertyNotFound + " " + key);
        }
    }
    private int getIntegerProperty(String key)
    {
        String propertyValue = this.getProperty(key);
        try
        {
            int propertyIntValue = Integer.parseInt(propertyValue);
            return propertyIntValue;
        }
        catch (NumberFormatException e)
        {
            throw new NumberFormatException(this.propertyNotValid + " " + key);
        }
    }
    private boolean getBooleanProperty(String key)
    {
        String propertyValue = this.getProperty(key);
        try
        {
            boolean propertyBooleanValue = Boolean.parseBoolean(propertyValue);
            return propertyBooleanValue;
        }
        catch (NumberFormatException e)
        {
            throw new NumberFormatException(this.propertyNotValid + " " + key);
        }
    }
    private long getLongProperty(String key)
    {
        String propertyValue = this.getProperty(key);
        try
        {
            long propertyLongValue = Long.parseLong(propertyValue);
            return propertyLongValue;
        }
        catch (NumberFormatException e)
        {
            throw new NumberFormatException(this.propertyNotValid + " " + key);
        }
    }
    

    然后你可以创建一个地方:

      

    public static VerifiedProperties properties;

    并使用您需要的属性properties.myProperty

    优点:

    • 您可以完全控制属性,包括异常处理和空检查
    • 如果属性不存在或格式不正确,您将在程序初始化时获得信息
    • 您不必担心在代码中将属性解析为不同于String的类型。
    • 您可以在String属性
    • 中添加验证器
    • 您可以轻松地重构属性名称
    • 如果您使用的是可由应用程序以外的用户修改的外部属性文件,如果提供的更改不正确或缺少字段,则程序将无法启动。

    缺点:

    • 除了为*.properties文件添加值之外的每个属性,您还需要在构造函数中创建字段并赋值。如果你有很多属性,那么这个文件可能看起来很不愉快。

    提示:

    • 如果您在字段中保留与属性文件相同的名称,则更容易保留文件。
    • (Netbeans)您可以Toggle Rectangular Selection一次添加public final String并且类似于多行。
    • (Netbeans)要保持*.properties文件清洁,您可以使用this solution

答案 6 :(得分:1)

crazyscot的答案现在已经过时了。根据新的javadoc,如果该属性不存在,该属性将被创建,

  

&#34;如果没有当前系统属性集,则首先以与getProperties方法相同的方式创建和初始化一组系统属性&#34;。

答案 7 :(得分:-1)

以下是一些技巧如何找出类路径中存在的某些文件(非强制属性文件)

public class FileUtil {
    public static boolean isFileExists(String fileName){
         return null != FileUtil.class.getResourceAsStream(fileName);
    }
}

当然,它并不总是有效,这取决于课程加载方面