我有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时,问题变得更加复杂。
非常感谢!
答案 0 :(得分:2)
最简单的方法是使用ObjectOutputStream代替PrintWriter,您可以使用ObjectInputStream阅读结果。
这假设您的HashMap中包含的对象是Serializable或Externalizable
我只是序列化HashMap本身而不是entrySet。
使用对象序列化时有许多注意事项(版本控制,瞬态对象,枚举常量等),因此我建议您do some reading about the subject。
XMLEncoder和XMLDecoder可以提供更多的可移植性。
答案 1 :(得分:0)
除了使用其他人提到的序列化之外,另一个探索的途径是使用JSON作为持久格式。您可以使用Gson来完成此任务。