终极版快递E站——使用集合存储数据,序列化到本地文件,实现数据持久化
建议先看快递E站小项目--------MVC结构二维数组存储数据
本文章是对 快递E站小项目--------MVC结构二维数组存储数据做出改进的讲解
————————————————————————
1.二维数组改为集合存储数据——动态列表ArrayList、哈希映射HashMap
//使用 ArrayList存储对象
private ArrayList<Express> data = new ArrayList<>();
//因为取件操作较多,取件码和对象不做修改所以采用 HsahMap存储数据取件码为键,对象为值,增加查询速度
private HashMap<Integer, Express> hashMap = new HashMap<>();
2.使用序列化和反序列化实现数据的长期存储到文件中
import java.io.*;
public class MySerializable {
/**
* 反序列化.txt文件的数据
* @param txt
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public Object myDeserializable(String txt) throws IOException, ClassNotFoundException {
InputStream inputStream = new FileInputStream(txt);
ObjectInputStream objectIn = new ObjectInputStream(inputStream);
Object express = objectIn.readObject();
objectIn.close();
return express;
}
/**
* 序列化数据到.txt文件中
* @param data,txt
* @throws IOException
*/
public void mySerializable(Object data,String txt) throws IOException {
OutputStream out = new FileOutputStream(txt);
ObjectOutputStream objectOut = new ObjectOutputStream(out);
objectOut.writeObject(data);
objectOut.close();
}
}
注意:
1.要被序列化的类需要实现Serializable接口
2.这里有一个坑,对集合序列化需要先对集合里存储的对象序列化否则会出现错误
3.使用日志 记录错误信息
序列化和反序列化都需要处理异常错误,这里演示了序列化时try…catch处理异常。发生异常使用打印流写入log.txt日志。
/**
* 序列化Express到express.txt文件 和 ExpressNewDao到dao.txt文件
* @throws FileNotFoundException
*/
private static void serializable() throws FileNotFoundException {
try {
for (Express i: dao.getData()){
s.mySerializable(i,"express.txt");
}
s.mySerializable(dao,"dao.txt");
} catch (IOException e) {
PrintWriter pw = new PrintWriter("log.txt");
//格式化时间
SimpleDateFormat std = new SimpleDateFormat("yyyy-MM-dd HH:mm");
pw.append(std.format(new Date()));
e.printStackTrace(pw);
pw.close();
}
}
以上是对快递E站做出的修改介绍,适合java初学者,能够很好的应用和学习集合、序列化、MVC结构。源代码已上传,有需求者可下载。
源码连接https://download.csdn.net/download/weixin_45600855/14933215.
这只是一个在学习过程中的小项目还有很多问题,如有发现可以留言讨论。