当前位置:  开发笔记 > 编程语言 > 正文

与HashMap序列化的NotSerializableException

如何解决《与HashMap序列化的NotSerializableException》经验,为你挑选了1个好方法。

我有序列化的问题...我测试这个方法与类分开并正常工作!但是当我使用这个课时NotSerializableException

代码:
必须序列化的
public ArrayList users;
属性:此属性在UserManage类中

此方法用于从数据库文件中读取:

public void readFromDataBaseFile(){
    File database=new File(this.saveUsersObject+"\\"+"Database.txt");
    if(!database.exists()){
        System.out.println("Exception:FileNotExist");
    }
    else{
        HashMap Data=(HashMap)FileHandler.readObjectInFile(database);
        this.users= (ArrayList) Data.get("users");
    }
}

而这种写入数据库文件的方法:

public void writeToDataBaseFile(){
    File database=new File(this.saveUsersObject+"\\"+"Database.txt");
    if(!database.exists()) {
        File parent=database.getParentFile();
        parent.mkdirs();
    }
    HashMap Data=allOfUsersToHashMap();
    if(Data.isEmpty()){
        System.out.println("DataBase HashMap Is Empty!");

    }
    else{
        FileHandler.writeObjectInFile(Data,database);
    }
}

上面的方法是在课堂上UserManage.

下面的方法是一个在文件中写入对象的辅助方法:

    boolean writeObjectInFile(Object obj,File file):

public static boolean writeObjectInFile(Object obj,File file){
    String Path=file.getAbsolutePath();
    if(file.exists()){
        System.out.println("Object File Was Deleted!!");
        file.delete();
    }
    else{
        try
        {

            FileOutputStream fileOut = new FileOutputStream(Path);
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(obj);
            out.close();
            fileOut.close();
            System.out.printf("Serialized data is saved To :"+file.getPath());
            return true;
        }catch(IOException i)
        {
            i.printStackTrace();
        }
    }

    return false;
}

以下方法是从文件中读取对象的辅助方法:

    Object readObjectInFile(File file):

 public static Object readObjectInFile(File file) {
    Object obj=null;
    if(file.isFile()){
        try
        {

            FileInputStream fileIn = new FileInputStream(file);
            ObjectInputStream in = new ObjectInputStream(fileIn);
            System.out.println(file.getAbsoluteFile());
            obj=in.readObject();
            fileIn.close();
            in.close();
            System.out.printf("DeSerialized data is Done From:"+file.getPath());
        }catch(IOException i)
        {
            i.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    else {
        System.out.println("returned null :\\");
        System.out.println("Enter Address Of A File Not Folder Or Another! :\\");
    }
    return obj;
}

allOfUsersToHashMap()课堂上的方法UserManage:

public HashMap allOfUsersToHashMap(){
    HashMap Userdatabase=new HashMap<>();
    Userdatabase.put("users",this.users);
    return Userdatabase;
}

我必须说什么时候ArrayList usernull是这个方法正常工作但是什么时候用户不工作!



1> 小智..:

如果User类未实现Serializable接口,则无法序列化ArrayList.有关实现的详细信息,请参阅JavaDoc for Serializable:https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有