所以我遇到了将HashMap
属性存储到Properties
文件的转换问题,因为HashMap
的键是一个无法转换为java.lang.String
的对象,因为属性必须为(String, String)
,HashMap
为(Object, Long)
。
我只想将HashMap
的内容保存到文件中,这样我就可以在下次运行程序时将这些内容加载回HashMap
。
我已经经历了一些过多的毫无价值的尝试,试图在保存之前用HashMaps
重新填充它们所包含的对象。我试着想出一种简单的方法将对象转换为我可以做的字符串,但由于Properties
和HashMaps
没有编入索引,我无法将这些字符串更改回他们需要的对象是。怎么做到这一点?
以下是我要做的事情:
public File savedHashMaps = new File("SavedHashMaps.list");
// in my case, the object is 'Location' from an implemented API
public Map<Location, Long> map = new HashMap<Location, Long>();
public void saveMaps() {
Properties prop = new Properties();
try {
if (!map.isEmpty()) {
prop.load(new FileInputStream(savedHashMaps));
prop.putAll(map);
prop.store(new FileOutputStream(savedHashMaps), null);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void loadMaps() {
Properties prop = new Properties();
try {
prop.load(new FileInputStream(savedHashMaps));
if (!prop.isEmpty()) {
map.putAll((Map)prop);
}
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
使用ObjectInput/OutputStream
public File savedHashMaps = new File("SavedHashMaps.list");
public Map<Location, Long> map = new HashMap<Location, Long>();
public void saveMaps() {
try {
ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream(savedHashMaps));
oos.writeObject(map);
oos.close();
} catch (Exception e) {
// Catch exceptions
}
}
public void loadMaps() {
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(savedHashMaps));
Object readMap = ois.readObject();
if(readMap != null && readMap instanceof HashMap) {
map.putAll((HashMap) readMap);
}
ois.close();
} catch (Exception e) {
// Catch exceptions
}
}
这是来自内存,很抱歉错误,但是这将保存并重新加载所有位置,长映射。另外作为注释,Location类必须实现Serializable
(或者有一个实现它的超类)(它是一个标记接口(参见java.dzone.com/articles/marker-interfaces-java),所以你只需要添加implements Serializable
)。