【问题标题】:java HashMap to file and file to HashMap outputs nulljava HashMap到文件和文件到HashMap输出null
【发布时间】:2018-06-27 20:50:56
【问题描述】:

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

我的问题是,我从 hasMapReader 获得的输出只是空,在我将 HashMap“保存”在一个新文件中并将其“写入”到另一个 HashMap 之后。

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 在第三个“主”类中) 然后是另一个类中的 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: null; HashMap 键:[]

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

我现在正在尝试解决这个问题将近一周。

谢谢:),

【问题讨论】:

标签: java null hashmap fileinputstream fileoutputstream


【解决方案1】:

map2hashMapReader 中的一个参数,但在该方法中您执行以下分配:

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

更新map2 变量,但不更新map2 引用的对象。由于hashMapReader 返回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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2016-03-16
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多