使用默认值在java中进行应用程序配置

使用默认值在java中进行应用程序配置,java,properties,Java,Properties,我试图创建一个带有默认值的java属性文件,但是我看到的所有示例都是关于读取已经存在的java属性文件,或者不关心前面的内容而编写的,并且似乎没有涉及使用默认值 基本上我想做的是 加载与应用程序捆绑在一起的默认配置文件(在jar文件内) 从应用程序根文件夹加载自定义配置文件(如果存在) #File user.properties: user=user name=name 如果自定义配置文件不存在,则根据与应用程序捆绑的默认配置编写一个注释为“不做任何事情”的配置 #File user.pr

我试图创建一个带有默认值的java属性文件,但是我看到的所有示例都是关于读取已经存在的java属性文件,或者不关心前面的内容而编写的,并且似乎没有涉及使用默认值

基本上我想做的是

  • 加载与应用程序捆绑在一起的默认配置文件(在jar文件内)

  • 从应用程序根文件夹加载自定义配置文件(如果存在)

    #File user.properties:
    user=user
    name=name
    
  • 如果自定义配置文件不存在,则根据与应用程序捆绑的默认配置编写一个注释为“不做任何事情”的配置

    #File user.properties:
    #user=default
    #pwd=default
    
  • 组合两个配置文件,使用未填充密钥的默认值,并在适当的情况下使用新值

    #File app.properties:
    user=user
    pwd=default
    name=name
    
  • 我已经浏览了java.properties API和java Preferences API,但Preferences API似乎没有什么用处,因为配置是特定于用户的,而不是特定于应用程序的。

    如何:

    文件default.properties:

    user=default
    pwd=default
    
    pwd=user
    name=user
    
    文件user.properties:

    user=default
    pwd=default
    
    pwd=user
    name=user
    
    将被打印:
    {user=default,name=user,pwd=user}

    class Main {
      public static void main(final String [] args) throws IOException {
        //load default properties
        final Properties defaultProp = new Properties();
        defaultProp.load(Main.class.getResourceAsStream("default.properties"));
    
        //load user properties
        final Properties userProp = new Properties();
        userProp.load(new FileInputStream(new File("./user.properties")));
    
        final Properties appProp = new Properties();
    
        //mix properties
        appProp.putAll(defaultProp);
        appProp.putAll(userProp);
    
        System.out.println(appProp);
      }  
    }
    

    java.util.Properties扩展了实现java.util.Map的java.util.Hashtable,所以您可以使用Map中的所有方法。

    很抱歉,让我重写一下这个注释。如何检查文件是否已经存在,如第3点所示。如果文件不存在,您可以使用以下代码:file f=new file(“./user.properties”);如果(f.exists()){//load prop}否则{//do nothing}好的,谢谢,我想我对构造文件对象的构造函数和创建新文件的构造函数感到困惑。您还可以使用默认的
    属性
    对象作为输入来构造自定义属性@看见