1.设有一个文件,addrinfo.properties,内容如下:
张三=郑州高新区电子商务产业园 李四=北京东单公园 王五=上海外滩 赵六=深圳大芬油画村 孙七=杭州西湖 钱八=广州长隆旅游度假区 周九=郑州大玉米 吴十=青岛栈桥 |
2.现在需要对文件中的数据进行读取,并封装为相应的拥有两个属性(name,addr)的对
象
3.将创建好的八个对象都放入一个ArrayList集合中,然后对ArrayList集合进行序列化。
4.通过javaIO相关知识对序列化后的文件进行读取,并打印地点在郑州的对象的信息。
package com.io.properties_deal;
import java.io.*;
import java.util.ArrayList;
import java.util.Properties;
import java.util.Set;
public class Homework1018_02 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 1. 创建properties对象,用作读取properties文件中的内容
Properties pro = new Properties();
// 2. 使用properties对象中的 load方法进行文本数据的读取
pro.load(new FileReader("D:\\addrinfo.properties"));
// 3. 使用properties对象中的stringPropertyNames方法对 properties对象中的key进行读取
// 得到一个set对象,用作循环
Set<String> userNames = pro.stringPropertyNames();
// 4. 构建一个ArrayList对象,用作存放所有的用户与地址信息对象UserAddr
ArrayList<UserAddr> userAddrs = new ArrayList<UserAddr>();
// 5. 对userNames[第3步创建出来的set集合]进行遍历
for (String userName : userNames) {
// 6. 将遍历出来的key(userName)与 通过pro.getProperty获取出来的用户地址用作参数
// 进行UserAddr对象的构建
UserAddr ua = new UserAddr(userName,pro.getProperty(userName));
// 7. 将new出来的对象放入到第4步创建的ArrayList中
userAddrs.add(ua);
}
// 8. 构建序列化流并将 ArrayList放入流中,输出至文件
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\user_info.txt"));
oos.writeObject(userAddrs);
oos.close();
// 9. 构建反序列化流,对文件进行读取与反序列化
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\user_info.txt"));
ArrayList<UserAddr> userAddrFromFile = (ArrayList<UserAddr>) ois.readObject();
// 10. 对readObject方法返回的ArrayList对象进行遍历
for (UserAddr userAddrRead : userAddrFromFile) {
// 11. 判断对象中,地址是否包含“郑州”,如果包含,则输出至控制台
if (userAddrRead.getAddr().contains("郑州")){
System.out.println(userAddrRead);
}
}
ois.close();
}
}