java练手——终极版快递E站——使用集合存储数据,序列化到本地文件

终极版快递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.

这只是一个在学习过程中的小项目还有很多问题,如有发现可以留言讨论。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值