Java 文件序列化和反序列化

文章介绍了如何在Java中使用ObjectOutputStream和ObjectInputStream进行List和Map对象的序列化与反序列化操作,以及如何结合JdbcTemplate从MySQL数据库查询数据并进行文件存储。
摘要由CSDN通过智能技术生成

list序列化

 /**
     * 序列化
     * @param list
     * @param filename
     * @throws IOException
     */
    public static void serializeList(List<Map<String, Object>> list, String filename) throws IOException {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
            oos.writeObject(list);
        }
    }

    /**
     * 反序列化
     * @param filename
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static List<Map<String, Object>> deserializeList(String filename) throws IOException, ClassNotFoundException {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
            @SuppressWarnings("unchecked")
            List<Map<String, Object>> list = (List<Map<String, Object>>) ois.readObject();
            return list;
        }
    }
 /**
     * 查询数据
     *
     * @return
     */
    public List<Map<String, Object>> getdata() {
        JdbcTemplate jdbcTemplate2 = getJdbcTemplate2(
                "jdbc:mysql://localhost:3306/gzw?serverTimezone=UTC"
                , "root"
                , "root");
        String sql = "select name,max(mon) from (\n" +
                "select name,lx,sum(money) mon from user GROUP BY name,lx order by name ) t1 GROUP BY name order by name ";
        List<Map<String, Object>> maps = jdbcTemplate2.queryForList(sql);
        return maps;
    }

    public List getLx() throws IOException, ClassNotFoundException {
        String name = "gzw.data"+sdf.format(new Date());
        //先判断有没有文件
        String dir = "E:\\test\\";
        File file = new File(dir + name);
        //有文件就用文件数据 -数据多久更新
        if (file.exists()) {
            List<Map<String, Object>> objects = deserializeList(dir + name);
            return objects;
        } else {
            //没有文件数据,查询sql
            List<Map<String, Object>> getdata = getdata();
            //序列化,保存为文件
            serializeList(getdata, dir + name);
            return getdata;
        }
    }
 public static void serializeList(List<Object> list, String filename) throws IOException {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
            oos.writeObject(list);
        }
    }

    public static List<Object> deserializeList(String filename) throws IOException, ClassNotFoundException {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
            @SuppressWarnings("unchecked")
            List<Object> list = (List<Object>) ois.readObject();
            return list;
        }
    }

map序列化

package com.dxy.util.xlh;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

/**
 * Java序列化和反序列化 map
 */
public class SerializeDeserializeMap {

    public static void serializeMap(Map<String, Object> map, String filename) throws IOException {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
            oos.writeObject(map);
        }
    }

    //@SuppressWarnings("unchecked")
    public static Map<String, Object> deserializeMap(String filename) throws IOException, ClassNotFoundException {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
            return (Map<String, Object>) ois.readObject();
        }
    }

    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", 1);

        try {
            // 序列化
            serializeMap(map, "map.ser");

            // 反序列化
            Map<String, Object> deserializedMap = deserializeMap("map.ser");
            System.out.println(deserializedMap);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值