[英]Java: Writing/Reading a Map from disk
我有一個數據結構,我希望能夠在關閉程序之前寫入文件,然后從文件中讀取以在下次應用程序啟動時重新填充結構。
我的結構是HashMap<String, Object>
。 對象非常簡單; 對於成員變量,它有一個String,以及兩個Boolean類型的小型本機數組。 這是一個非常簡單的應用程序,我不希望一次超過10-15個<key,value>
對。
我一直在使用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機制進行序列化。 HashMap
和String
已經實現了這個接口,因此可以成功序列化。
看一下Sun自己的序列化教程 - 它很簡短,我認為應該涵蓋簡單案例所需的一切。 (您應該只能將Map
對象序列化為流,然后在后續運行中將其讀回)。
如果遇到問題,請嘗試使用一些虛擬值序列化一個簡單的HashMap<String, String>
。 如果這成功了,你就會知道問題在於(以某種方式)你自己的班級'可串行化; 或者,如果這不起作用,您可以在將自己的類投入混合之前關注基本結構。
如果您有任何您自己無法解決的具體問題,請回發。
是的,如果要將對象寫入文件系統,則該對象必須實現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<String,String> hashmap=new HashMap<String,String>();
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<String,String> anotherList = (Map<String,String>) ois.readObject();
ois.close();
System.out.println(anotherList);
} catch (FileNotFoundException e) {e.printStackTrace();
} catch (IOException e) {e.printStackTrace();
} catch (ClassNotFoundException e) {e.printStackTrace();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.