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 键:[]
我认为的另一个问题是,每次启动该程序时文件都可能被替换。
我现在正努力解决这个问题将近一个星期。
谢谢 :),
你 map2
是 hashMapReader
中的一个参数,但在该方法中你执行了以下赋值:
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));
大家好,我是这个论坛的开发新手,想创建一个登录镜像。因为我的老师,我不得不使用 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 键:[]
我认为的另一个问题是,每次启动该程序时文件都可能被替换。
我现在正努力解决这个问题将近一个星期。
谢谢 :),
你 map2
是 hashMapReader
中的一个参数,但在该方法中你执行了以下赋值:
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));