Java(HashMap) - 如何保存和加载entrySet()?

时间:2013-05-14 23:14:02

标签: java hashmap save key

我有2个哈希图,我希望在单击菜单按钮时保存两个,并且我希望能够加载它们(在示例中我只保存一个)。

void saveHash(HashMap<String, Object> hash, HashMap<String, Object> logicalMatrix2) {
    JFrame parentFrame = new JFrame();

    JFileChooser fileChooser = new JFileChooser();
    fileChooser.setDialogTitle("Especifique um diretório:");
    fileChooser.setAcceptAllFileFilterUsed(false);

    int userSelection = fileChooser.showSaveDialog(parentFrame);

    if (userSelection == JFileChooser.APPROVE_OPTION) {
        File fileToSave = new File(fileChooser.getSelectedFile() + ".alg");
        Set<Entry<String, Object>> entry = hash.entrySet();
        FileWriter outFile;
        try {
            outFile = new FileWriter(fileToSave.getAbsolutePath());
            PrintWriter out = new PrintWriter(outFile);
            out.println(entry);
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}

有了这个,我可以将entrySet()保存在txt文件中,但后来我不知道如何加载这个内容。该软件将从HashMap开始为空,然后,通过加载过程,我希望能够相应地填充键及其各自的值。但是,考虑到它保存在txt文件中,我怎么能通过它运行“读取循环”来识别未知密钥?当我们考虑每个键的值是一个ArrayList时,问题变得更加复杂。

非常感谢!

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用ObjectOutputStream代替PrintWriter,您可以使用ObjectInputStream阅读结果。
这假设您的HashMap中包含的对象是SerializableExternalizable 我只是序列化HashMap本身而不是entrySet。 使用对象序列化时有许多注意事项(版本控制,瞬态对象,枚举常量等),因此我建议您do some reading about the subject

如果您需要读取Java环境之外的文件或希望它们是人类可读的,那么

XMLEncoderXMLDecoder可以提供更多的可移植性。

答案 1 :(得分:0)

除了使用其他人提到的序列化之外,另一个探索的途径是使用JSON作为持久格式。您可以使用Gson来完成此任务。