properties:集合
功能流:把map结合中的数据写入本地持久化
没哟泛型,因为key和value类型固定,都是string类型
父类hashtable方法:
keySet() 获取所有key集合
put(key,value) 添加元素
get(key) 根据key获取value
特有方法
setProperty(key,value) 添加元素
getProperty(key) 根据key获取对应的value
stringPropertyNames(); 获取所有的key
store(writer,comment)以gbk写本地,可以看懂
store(outputStream,comments)写入本地以ios-8859-1写入本地,看不懂
loade(inputStream) 读取数据
loade(reader)读取数据
注意:store中的流不用close() ,store底层帮我们关了。
// 写入数据
Properties p = new Properties();
p.setProperty("1","1");
p.setProperty("2","2");
p.setProperty("3","3");
p.store(new fileWriter(""F:\\aaa\\1.txt),"text");
// 读取数据
p.load(new FileReader("F:\\aaa\\1.txt"));
Set<String> keys = p.stringPropertyNames();
for(Iterator<String> iterator = keys.iterator;iterator.hasNext();){
String key = iterator.next();
String value = p.getProperty(key);
}
序列化和反序列化
ObjectOutputStream(outputStream)
writeObject(obj)
注意:对象要实现Serializable接口,如果一个对象要想序列化或者反序列化,那么对象所属类,必须实现Serializable,这个接口中什么都没有,这样的接口称为标记性接口,作用,起到标记作用,只要实现这个接口,那么类的对象就可以被序列化或者反序列化
ObjectInputStream(inputStream)
readObject(obj)
只要一个类实现了Serializable接口之后,只要编译,那么jvm会根据类所有内容(类名,报名,方法修饰符,属性,属性值等)生成一个默认版本号 serialVersionUID
这个版本号最后会计算为long类型的数据,当我们使用序列化配置文件,也会把版本号存入,当你修改内容的时候会重新生成一个版本号,这样会导致,配置文件版本号和本地版本号不一致
显示声明 serialVersionUID 版本号
不想被序列化到本地:
1.用static 修饰
2.transient 瞬态 修饰的内容不会被序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("F:\\aaa\\student.txt" ));
out.writeObject( new Student("dubo" , 23));
ObjectInputStream input = new ObjectInputStream(new FileInputStream("F:\\aaa\\student.txt" ));
Student s = (Student) input.readObject();
System. out.println(s .getName()+"----------"+ s.getAge());
如果想要保存多个对象,可以把对象存到数组或集合中,然后把集合序列化
网友评论