3

对于属性类,我们将以下内容作为构造函数之一:

Properties(Properties default)
    Creates an empty property list with the specified defaults

“具有指定默认值的空属性列表”是什么意思

我写了一个演示程序来测试发生了什么:

import java.util.*;
import java.io.*;

public class test {
    private static String z;
    private static String i;

    public static void main(String [] args) throws FileNotFoundException, IOException{
        z = "a";
        i = "b";
        Properties p = new Properties();

        p.setProperty("z",z);
        p.setProperty("i",i);
        p.store(new FileOutputStream("r.txt"), null);

        Properties pp = new Properties(p);
        pp.store(new FileOutputStream("random.txt"), null);
        pp.load(new FileInputStream("in.txt"));
        pp.store(new FileOutputStream("random1.txt"), null); 
    }
}

结果random.txt是空的,random1.txtz=n。新创建的属性没有默认值,因为random.txt它是空的。那么构造函数描述是什么意思呢?如果我在某处错了,请纠正我。

4

3 回答 3

2

这意味着当它在运行时找不到该属性时,它将回退到默认属性,它不是一个复制构造函数。

您可能要考虑使用.putAll()代替。

于 2013-08-21T19:46:48.060 回答
2

正如文档所述store默认属性(在Properties(Properties)构造函数中传递的属性)不会写入外部文件。显然你认为他们会(一个合理的假设)。

以下测试:

import java.util.*;
import java.io.*;

public class test {
    public static void main(String [] args) {
        Properties p = new Properties();

        p.setProperty("z", "z value");
        p.setProperty("i", "i value");

        Properties pp = new Properties(p);
        pp.setProperty("i", "some other value");

        System.out.println(p.getProperty("z"));
        System.out.println(p.getProperty("i"));
        System.out.println(pp.getProperty("z"));
        System.out.println(pp.getProperty("i"));
    }
}

输出:

z value
i value
z value
some other value

如果您需要包含默认值store,则一种选择是Properties使用您自己的类进行扩展并覆盖store以输出默认属性。

于 2013-08-21T19:47:07.900 回答
0

Properties pp = new Properties(p);

这允许任意嵌套默认属性的级别。

例如

    Properties p = new Properties();
    p.setProperty("z","hello");
    p.store(new FileOutputStream("D://java1.properties"), null);
    Properties pp = new Properties(p);
    pp.setProperty("y","world");
    System.out.println(pp.getProperty("z")); //prints hello

如果您调用pp.getProperty("z")对象PP,并且“z”不存在,Java会在默认的 Properties 对象(即对象)中查找“z”,然后找到z”并打印其值“hello”P

更多详情请看这里

于 2013-08-21T19:52:06.793 回答