J'ai un HashMap
avec deux chaînes Map<String, String> ldapContent = new HashMap<String, String>
.
Maintenant, je veux enregistrer le Map
dans un fichier externe pour utiliser le Map
plus tard sans l'initialiser à nouveau ...
Alors, comment dois-je enregistrer le Map
pour l'utiliser à nouveau plus tard?
HashMap
implémente Serializable
afin que vous puissiez utiliser la sérialisation normale pour écrire une table de hachage dans un fichier
Voici le lien pour Java - Sérialisation exemple
La solution la plus simple à laquelle je peux penser est d'utiliser la classe Properties.
Sauvegarde de la carte:
Map<String, String> ldapContent = new HashMap<String, String>();
Properties properties = new Properties();
for (Map.Entry<String,String> entry : ldapContent.entrySet()) {
properties.put(entry.getKey(), entry.getValue());
}
properties.store(new FileOutputStream("data.properties"), null);
Chargement de la carte:
Map<String, String> ldapContent = new HashMap<String, String>();
Properties properties = new Properties();
properties.load(new FileInputStream("data.properties"));
for (String key : properties.stringPropertyNames()) {
ldapContent.put(key, properties.get(key).toString());
}
ÉDITER:
si votre carte contient des valeurs en texte brut, elles seront visibles si vous ouvrez des données de fichier via un éditeur de texte, ce qui n'est pas le cas si vous sérialisez la carte:
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.ser"));
out.writeObject(ldapContent);
out.close();
EDIT2:
au lieu de la boucle for (comme suggéré par OldCurmudgeon) dans l'exemple d'enregistrement:
properties.putAll(ldapContent);
cependant, pour l'exemple de chargement, c'est le mieux qui puisse être fait:
ldapContent = new HashMap<Object, Object>(properties);
étant donné que HashMap
implémente l'interface Serializable
, vous pouvez simplement utiliser la classe ObjectOutputStream
pour écrire l'ensemble Map
dans un fichier et le relire à l'aide de ObjectInputStream
classe
ci-dessous un code simple qui explique l'utilisation de ObjectOutStream
et ObjectInputStream
import Java.util.*;
import Java.io.*;
public class A{
HashMap<String,String> hm;
public A(){
hm=new HashMap<String,String>();
hm.put("1","A");
hm.put("2","B");
hm.put("3","C");
method1(hm);
}
public void method1(HashMap<String,String> map){
//write to file : "fileone"
try{
File fileOne=new File("fileone");
FileOutputStream fos=new FileOutputStream(fileOne);
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(map);
oos.flush();
oos.close();
fos.close();
}catch(Exception e){}
//read from file
try{
File toRead=new File("fileone");
FileInputStream fis=new FileInputStream(toRead);
ObjectInputStream ois=new ObjectInputStream(fis);
HashMap<String,String> mapInFile=(HashMap<String,String>)ois.readObject();
ois.close();
fis.close();
//print All data in MAP
for(Map.Entry<String,String> m :mapInFile.entrySet()){
System.out.println(m.getKey()+" : "+m.getValue());
}
}catch(Exception e){}
}
public static void main(String args[]){
new A();
}
}
ou si vous voulez écrire des données sous forme de texte dans un fichier, vous pouvez simplement parcourir Map
et écrire la clé et la valeur ligne par ligne, et la relire ligne par ligne et ajouter à HashMap
import Java.util.*;
import Java.io.*;
public class A{
HashMap<String,String> hm;
public A(){
hm=new HashMap<String,String>();
hm.put("1","A");
hm.put("2","B");
hm.put("3","C");
method2(hm);
}
public void method2(HashMap<String,String> map){
//write to file : "fileone"
try{
File fileTwo=new File("filetwo.txt");
FileOutputStream fos=new FileOutputStream(fileTwo);
PrintWriter pw=new PrintWriter(fos);
for(Map.Entry<String,String> m :map.entrySet()){
pw.println(m.getKey()+"="+m.getValue());
}
pw.flush();
pw.close();
fos.close();
}catch(Exception e){}
//read from file
try{
File toRead=new File("filetwo.txt");
FileInputStream fis=new FileInputStream(toRead);
Scanner sc=new Scanner(fis);
HashMap<String,String> mapInFile=new HashMap<String,String>();
//read data from file line by line:
String currentLine;
while(sc.hasNextLine()){
currentLine=sc.nextLine();
//now tokenize the currentLine:
StringTokenizer st=new StringTokenizer(currentLine,"=",false);
//put tokens ot currentLine in map
mapInFile.put(st.nextToken(),st.nextToken());
}
fis.close();
//print All data in MAP
for(Map.Entry<String,String> m :mapInFile.entrySet()){
System.out.println(m.getKey()+" : "+m.getValue());
}
}catch(Exception e){}
}
public static void main(String args[]){
new A();
}
}
REMARQUE: le code ci-dessus n'est peut-être pas le moyen le plus rapide de faire cette tâche, mais je veux montrer une application des classes
Voir ObjectOutputStream , ObjectInputStream , HashMap , Serializable , StringTokenizer
Vous pouvez écrire un objet dans un fichier à l'aide de writeObject
dans ObjectOutputStream