我有一个场景,我有多个HashMap对象需要存储在同一个文本文件中。 例如:
a.put("01jan", 13);
a.put("02feb", 13);
a.put("03march", 13);
a.put("04apr", 13);
a.put("05may", 13);
b.put("06june", 12);
b.put("07july", 12);
b.put("08aug", 12);
b.put("09sept", 12);
b.put("10oct", 12);
我想使用java序列化将对象保存在同一个txt文件中。
有没有办法在我尝试使用FileOutputStream( file_name,true)
之后一个接一个地执行此操作。此外,当我尝试检索对象时,请在需要时说HashMap b
和HashMap a
。有没有办法实现这个目标?
如何检索out of order
个对象并检索正确的对象?
谢谢, Bhavya
答案 0 :(得分:7)
您可以将所有hashmap对象放在ArrayList中,然后序列化ArrayList对象。稍后,当您取消实现ArrayList对象时,可以返回单个HashMap对象:
List<HashMap> list = new ArrayList<HashMap>();
list.add(a);
list.add(b);
// serialize the list object
答案 1 :(得分:2)
如果您要存储许多地图,地图使用键/值对,因此我建议以键/值格式存储数据。 JSON是人类可读的数据可互换格式,它基于密钥/值。它可以存储在一个文件中,您可以使用JSONObject(javadoc)或GSON来序列化/反序列化数据。
示例:
{"hashmap1":
[
{"01jan": 13},
{"02feb": 13},
{"03march", 13}
]
}
答案 2 :(得分:1)
检索对象乱序没有任何好处,只需将所有数据保存到磁盘,并在需要时从磁盘加载所有数据。除非文件至少为64KB,否则无关紧要。
如果您的数据较大,则可以将a
和b
放在单独的文件中,但它不会产生超过几毫秒的差异,但会使您的代码更加复杂。
FileOutputStream(file_name,true)
您无法将ObjectOutputStream附加到文件中。当您读回数据时,您将只获得第一个数据。 (您可以通过很多痛苦来检索数据,但最好不要尝试)
答案 3 :(得分:0)
另一种方法是将每个HashMap
作为条目存入Zip档案。