序列化DAO小案例

DAO 案例
文件结构:

FileEngine,封装用于序列化的方法,读,写!
DAO访问文件中对象的类,内部封装增删改查方法,写入或读取时,可以调用FileEngine
Student类
如果有排序的需求,如使用treeMap,需要新建Comparator

/* 私有化构造函数
 * 读取,写入操作都是静态方法
 * 注意流的使用ObjectIutputStream(fout), ObjectOutputStream(fout);
 /


public class FileEngine {

    private static String file = "stus.txt";

    private FileEngine() {
    }

    /**
     * 把保存学生数据的Set集合序列化到文件中
     * 
     * @param set
     */
    public static void writeSetToFile(Set set) {
        FileOutputStream fout = null;
        ObjectOutputStream oout = null;

        try {
            // 写文件的时候不需要把append作为true
            fout = new FileOutputStream(file);
            oout = new ObjectOutputStream(fout);
            oout.writeObject(set);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (oout != null) {
                    oout.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 通过反序列化,从文件中读取保存学生信息的Set集合
     * 
     * @return
     */
    public static Set readSetFromFile() {
        Set set = null;
        FileInputStream fin = null;
        ObjectInputStream oin = null;

        try {
            fin = new FileInputStream(file);
            oin = new ObjectInputStream(fin);

            set = (Set) oin.readObject(); //读出来的是Object类型,需要转换
        } catch (FileNotFoundException e) {
            set = new TreeSet<>(new StudentComparator());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (oin != null) {
                    oin.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return set;
    }

}


Student类里面需要做序列化处理

public class Student implements Serializable {

// 这个serialVersionUID的作用就是告诉编译器,Student类型无论如何变化,该类的版本永远都是2944887634634097971L
private static final long serialVersionUID = 2944887634634097971L;


......
}

你可能感兴趣的:(序列化DAO小案例)