lis*_*sam 17 java file-io file hashmap
我有以下HashMap:
HashMap<String,Object> fileObj = new HashMap<String,Object>();
ArrayList<String> cols = new ArrayList<String>();
cols.add("a");
cols.add("b");
cols.add("c");
fileObj.put("mylist",cols);
Run Code Online (Sandbox Code Playgroud)
我将它写入文件如下:
File file = new File("temp");
FileOutputStream f = new FileOutputStream(file);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(fileObj);
s.flush();
Run Code Online (Sandbox Code Playgroud)
现在我想将此文件读回HashMap,其中Object是一个ArrayList.如果我只是这样做:
File file = new File("temp");
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(f);
fileObj = (HashMap<String,Object>)s.readObject();
s.close();
Run Code Online (Sandbox Code Playgroud)
这不会以我保存的格式给出对象.它返回一个包含15个null元素的表和第3个元素的<mylist,[a,b,c]>对.我希望它只返回一个元素,其中包含我首先提供给它的值.
//如何将同一个对象读回HashMap?
好基于Cem的说明:这似乎是正确的解释:
ObjectOutputStream以ObjectInputStream理解的反序列化格式序列化对象(在本例中为HashMap),并且对任何Serializable对象都是如此.如果您希望以您希望的格式进行序列化,则应编写自己的序列化器/解串器.
就我而言:当我从文件中读回Object并获取数据并用它做任何我想做的事情时,我只是遍历HashMap中的每个元素.(它只在有数据的地方进入循环).
谢谢,
Pet*_*rey 13
您似乎混淆了HashMap的内部解析与HashMap的行为方式.收藏品是一样的.这是一个简单的测试,以证明它.
public static void main(String... args)
throws IOException, ClassNotFoundException {
HashMap<String, Object> fileObj = new HashMap<String, Object>();
ArrayList<String> cols = new ArrayList<String>();
cols.add("a");
cols.add("b");
cols.add("c");
fileObj.put("mylist", cols);
{
File file = new File("temp");
FileOutputStream f = new FileOutputStream(file);
ObjectOutputStream s = new ObjectOutputStream(f);
s.writeObject(fileObj);
s.close();
}
File file = new File("temp");
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(f);
HashMap<String, Object> fileObj2 = (HashMap<String, Object>) s.readObject();
s.close();
Assert.assertEquals(fileObj.hashCode(), fileObj2.hashCode());
Assert.assertEquals(fileObj.toString(), fileObj2.toString());
Assert.assertTrue(fileObj.equals(fileObj2));
}
Run Code Online (Sandbox Code Playgroud)
我相信你\xc2\xb4正在犯一个常见的错误。您使用后忘记关闭流!
\n\n File file = new File("temp"); \n FileOutputStream f = new FileOutputStream(file); \n ObjectOutputStream s = new ObjectOutputStream(f); \n s.writeObject(fileObj);\n s.close();\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
72012 次 |
| 最近记录: |