3

HashMap因此,我在将属性存储到文件时遇到了转换问题,Properties因为 的键HashMap是一个无法转换为的对象,java.lang.String因为属性必须是(String, String)而 my HashMapis (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();
    }
}
4

1 回答 1

2

使用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)。

于 2012-11-28T04:10:35.350 回答