今天我尝试使用Object
存储java.util.properties
。我看到许多示例只使用String
或Integer
。这是一个例子:
public static void main(String[] args) {
Properties prop = new Properties();
// add some properties
prop.setProperty("Height", "200");
prop.put("Width", "1500");
// print the list
System.out.println("" + prop);
try {
// store the properties list in an output stream
prop.store(System.out, "config.properties");
} catch (IOException ex) {
ex.printStackTrace();
}
}
那么可以在Object
文件或properties
文件中存储xml
吗?
答案 0 :(得分:3)
要存储对象,首先应将其序列化为字节数组,然后使用Base64 encoder对其进行编码:
public static String toString(Object o) throws IOException {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);) {
oos.writeObject(o);
return new String(Base64Coder.encode(baos.toByteArray()));
}
}
然后您可以将其安全地存储到属性文件中:
prop.put("object.instance", toString(o));
要从属性中读取对象,请使用以下函数:
public static Object fromString(String s) throws IOException, ClassNotFoundException {
byte[] data = Base64Coder.decode(s);
Object o;
try (ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream(data))) {
o = ois.readObject();
}
return o;
}
您可以从字符串中反序列化对象:
Object o = fromString(prop.get("object.instance"));
答案 1 :(得分:2)
否,因为Javadoc声明:
如果在“受损”属性上调用商店或保存方法 对象包含非String键或值,调用将失败。
如果您确实需要将对象存储到Properties
中,则可以将其转换为JSON
,因为它是一种人类可读的众所周知的格式,如果有人添加了错误的字符中间你仍然可以解决它。
以下是使用ObjectMapper
:
Properties prop = new Properties();
ObjectMapper mapper = new ObjectMapper();
// Convert my object foo into JSON format and put it into my Properties object
prop.put("myObj", mapper.writeValueAsString(foo));
StringWriter output = new StringWriter();
// Store my properties
prop.store(output, null);
prop = new Properties();
// Load my properties
prop.load(new StringReader(output.toString()));
// Parse my object foo from the value of my new Properties object
Foo foo2 = mapper.readValue(prop.getProperty("myObj"), Foo.class);
Here是一个很好的教程,解释了如何在更多细节中使用ObjectMapper
。