Java:从磁盘写入/读取映射

我是Java的新手,所以我不确定最好的方法。 我有一个数据结构,我希望能够在关闭程序之前写入文件,然后从文件中读取以在下次应用程序启动时重新填充结构。

我的结构是HashMap 。 对象非常简单; 对于成员变量,它有一个String,以及两个Boolean类型的小型本机数组。 这是一个非常简单的应用程序,我不希望一次超过10-15个对。

我一直在用Object输入/输出流进行实验(不成功)。 我是否需要使Object类可序列化?

你能给我任何关于最佳方法的建议吗? 我只需要朝着正确的方向努力。 谢谢!

编辑:嗯,我仍然感到愚蠢,我正在从一张地图写入并阅读另一张地图,然后比较它们以检查我的结果。 显然我在比较他们错了。 叹。

如果你不特别关心Object,你只需要String,String的键值对,那么我建议你去java.util.Properties 。 否则你走了

  Map map = new HashMap(); map.put("1",new Integer(1)); map.put("2",new Integer(2)); map.put("3",new Integer(3)); FileOutputStream fos = new FileOutputStream("map.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(map); oos.close(); FileInputStream fis = new FileInputStream("map.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Map anotherMap = (Map) ois.readObject(); ois.close(); System.out.println(anotherMap); 
 Map m = new HashMap(); // let's use untyped and autoboxing just for example m.put("One",1); m.put("Two",2); ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("foo.ser") ); oos.writeObject(m); oos.flush(); oos.close(); 

是的,您的对象需要实现Serializable才能通过默认的Java机制进行序列化。 HashMapString已经实现了这个接口,因此可以成功序列化。

看一下Sun自己的序列化教程 – 它很简短,我认为应该涵盖简单案例所需的一切。 (您应该只能将Map对象序列化为流,然后在后续运行中将其读回)。

如果遇到问题,请尝试使用一些虚拟值序列化一个简单的HashMap 。 如果这成功了,你就会知道问题在于(以某种方式)你自己的类’可序列化; 或者,如果这不起作用,您可以在将自己的类投入混合之前关注基本结构。

如果您有任何您自己无法解决的具体问题,请回发。

是的,如果要将对象写入文件系统,则该对象必须实现Serializeable 。 这是一个可以帮助你的教程。

在了解更多关于它的用途之前,不要费心去制作Serializable。 你想看看FileWriter和google“java file io”写这个数据的好方法是CSV。

例如。

key1,key2,key3 valuea1,valuea2,valuea3 valueb1,valueb2,valueb3

希望这可以帮助。

我建议不要使用Serializable ; 比起初看起来要难得多。 似乎只需添加implements Serializable就可以了。 但事实上,这增加了对代码的许多限制,这些限制在实际软件开发中很难处理(而不是在学校中)。 要了解这些限制有多可怕,请参阅Bloch的Effective Java(第二版)一书。

SERIALIZE HASHMAP:这段代码工作正常,我在我的应用程序中实现并使用。 Plz相应地使你的函数保存地图和检索地图。

不好的是,您需要确认您在map中作为值放置的对象必须是可序列化的,这意味着它们应该实现serailizbele接口。 恩。 Map <.String,String> hashmap = new HashMap <.String,String>()..这一行在这一行… map和string都是可隐式序列化的,所以我们不需要为这些明确地实现serializble但是如果你把你自己的对象必须是可序列化的。


 public static void main(String arr[]) { Map hashmap=new HashMap(); hashmap.put("key1","value1"); hashmap.put("key2","value2"); hashmap.put("key3","value3"); hashmap.put("key4","value4"); FileOutputStream fos; try { fos = new FileOutputStream("c://list.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(hashmap); oos.close(); FileInputStream fis = new FileInputStream("c://list.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Map anotherList = (Map) ois.readObject(); ois.close(); System.out.println(anotherList); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } catch (ClassNotFoundException e) {e.printStackTrace(); } }