java HashMap 到文件和文件到 HashMap 输出 null

java HashMap to file and file to HashMap outputs null

大家好,我是这个论坛的开发新手,想创建一个登录镜像。因为我的老师,我不得不使用 BlueJ,是的,我猜这可能不是学习写作的最佳方法之一(我们在学校必须使用的版本甚至在编译前都没有显示错误)(我个人开始使用 Eclipse 写作).

我的问题是,在我 "saved" 新文件中的 HashMap 和 "wrote" 另一个 HashMap 中的 HashMap 之后,我从 hasMapReader 获得的输出为空。

HashMap<String, Serializable> userAcc = new HashMap<String, Serializable>();
userAcc.put(name, value);

otherClass.hashMapSaver(userAcc, hashMapFile = new java.io.File(location));



    public HashMap<String, Serializable> hashMapSaver(HashMap<String, Serializable> map, java.io.File file){
            try{   
    FileOutputStream f = new FileOutputStream(file);  
    ObjectOutputStream s = new ObjectOutputStream(f);          
    s.writeObject(map);

    s.close();
    f.close();

    }catch (IOException e) { 
       e.printStackTrace(); 
    }
    return map;
    }




   HashMap<String, Serializable> userAcc2 = new HashMap<String, Serializable>();
   otherClass.hashMapReader(userAcc2, new java.io.File(hashMapFile));

(userAcc2在第三个"main" class) 然后是另一个 class:

中的 hashMapReader
 public HashMap<String, Serializable> hashMapReader(HashMap<String, Serializable> map2, java.io.File file){

    try{   
    FileInputStream f = new FileInputStream(file);  
    ObjectInputStream s = new ObjectInputStream(f);          
    map2 = (HashMap<String, Serializable>) s.readObject();
    f.close();
    s.close();


    }catch (IOException e) { 
       e.printStackTrace(); 
       return null;
    }  catch (ClassNotFoundException c) {
     c.printStackTrace();
     return null;
    }
    return map2;
}



System.out.println("userAcc2: " + userAcc2.get(name));
System.out.println("HashMap Keys: " + userAcc2.keySet());

但控制台只是打印出来:

userAcc2: 空; HashMap 键:[]

我认为的另一个问题是,每次启动该程序时文件都可能被替换。

我现在正努力解决这个问题将近一个星期。

谢谢 :),

map2hashMapReader 中的一个参数,但在该方法中你执行了以下赋值:

map2 = (HashMap<String, Serializable>) s.readObject();

更新 map2 变量,但不更新 map2 引用的对象。由于 hashMapReader returns map2,以下更改将解决您的问题:

userAcc2 = otherClass.hashMapReader(userAcc2, new java.io.File(hashMapFile));

附带说明一下,map2 参数完全没有必要,因为您无论如何都不会使用传递的对象。稍微干净一点的东西是:

public HashMap<String, Serializable> hashMapReader(java.io.File file){
    HashMap<String, Serializable> map2 = null;
    try{   
        FileInputStream f = new FileInputStream(file);  
        ObjectInputStream s = new ObjectInputStream(f);          
        map2 = (HashMap<String, Serializable>) s.readObject();
        f.close();
        s.close();
    } catch (IOException e) { 
        e.printStackTrace(); 
        return null;
    } catch (ClassNotFoundException c) {
        c.printStackTrace();
        return null;
    }
    return map2;
}

...
userAcc2 = otherClass.hashMapReader(new java.io.File(hashMapFile));