对于属性类,我们将以下内容作为构造函数之一:
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.txt
为z=n
。新创建的属性没有默认值,因为random.txt
为空。那么构造函数描述意味着什么?如果我错了,请纠正我。
答案 0 :(得分:2)
这意味着当它在运行时找不到属性时,它将回退到默认的属性,它不是复制构造函数。
您可能需要考虑使用.putAll()。
答案 1 :(得分:2)
作为the store
documentation states,默认属性(在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
以输出默认属性。
答案 2 :(得分: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会在默认情况下查找“z”属性对象是P
对象,它找到“z”并打印其值“hello”
有关详细信息,请查看here