Stocker des donneés dans une Hashtable java! [Résolu/Fermé]

Signaler
Messages postés
31
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
4 mai 2009
-
Messages postés
31
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
4 mai 2009
-
Bonjour,à tous!

bonjour à tous!!

donc en faite j'ai un petit projet d'étude que j'éffectue avec une Hashtable pour entrer et stocké des donneés, mais le hic c'est dés que je ferme mon programme, les données s'évapore et la Hashtable est vierge!donc je voulais savoir s'il y'avait une astuce permettant à la Hashtable de garder les données déjà entrer!et voilà ci dessous un petit passage du code:


Scanner scan1=new Scanner(System.in);
String nom=scan1.nextLine();

Scanner scan2=new Scanner(System.in);
String prenom=scan2.nextLine();


Hashtable m=new Hashtable();

m.put(nom,prenom);


Enumeration tar=m.keys();

while (tar.hasMoreElements( ))
{

Object key = tar.nextElement( );
Object value = m.get(key);
System.out.println("le nom: "+key+"\nle prenom: "+value);

merci d'avance

5 réponses

Messages postés
69
Date d'inscription
lundi 4 février 2008
Statut
Membre
Dernière intervention
18 juin 2009
18
Bonjour,

tu veut dire que kan le programme s'arrete et que tu relance ton programme ta HashTable est vide?? Et bien ..... c normal une fois le programme arrêté toutes tes variables sont perdues. Le seul moyen et de sauvegarder ta Hastable dans un fichier.

Sinon dans ton code tu n'a pas besoin d'avoir deux new Scanner, juste scan1 suffit, puis pour ta HashTable tu peux utilisé la généricité après je ne sais pas si tu l'a déja vu en cour.
Messages postés
31
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
4 mai 2009

merci Godboss!oui c'est ça!!juste depuis toute à l'heure j'éssaye d'enregistrer les données de la Hashrtable dans un fichier,sans succés!meme un exemple simple!!sinon pour la généricité je connais pas,je vais faire une recherche dessus!


Scanner scan=new Scanner(System.in);

System.out.println("donnez le nom du client");
String nom=scan.nextLine();

System.out.println("donnez le prenom du client");
String prenom=scan.nextLine();


Hashtable m=new Hashtable();

m.put(nom,prenom);


Enumeration tar=m.keys();

while (tar.hasMoreElements( ))
{

Object key = tar.nextElement( );
Object value = m.get(key);
System.out.println("le nom: "+key+"\nle prenom: "+value);

}
Messages postés
31
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
4 mai 2009

en faite j'ai réussi à stocker les données que je saisis dans un fichier!mais le probléme reste le meme certe les données restent dans le fichier mais pas dans la hash table!

class T


{

Hashtable m;

public void chargerhash(String n,String p)
{

m=new Hashtable();
m.put(n,p);

}
public void affichhash()
{


Enumeration tar=m.keys();

System.out.println("le contenu de ton Htable:");
while (tar.hasMoreElements( ))
{

Object key = tar.nextElement( );
Object value = m.get(key);
System.out.println("le nom: "+key+"\nle prenom: "+value);

}
}




public static void main(String a[]) throws IOException
{




T myt=new T();

Scanner scan=new Scanner(System.in);

System.out.println("donnez le nom du client");
String nom=scan.nextLine();

System.out.println("donnez le prenom du client");
String prenom=scan.nextLine();

mytp.chargerhash(nom,prenom);
mytp.affichhash();

Fich monfich=new Fich();
monfich.saveinfich(nom);
monfich.saveinfich(prenom);

Affichfich ref=new Affichfich();
ref.lirefichier();

}
}

bien sur le code ci dessus n'est qu'une simulation!
Messages postés
69
Date d'inscription
lundi 4 février 2008
Statut
Membre
Dernière intervention
18 juin 2009
18
Voici le code que j'ai fait rapidement je t'ai rajouté le construcuteur c plus propre, je n'ai pas mi de généricité, si tu veu que je te la mette redit moi ya pas grand chose à changer, et si tu ne comprend pas ce que j'ai fait di le moi aussi

import java.util.*;
import java.io.*;
class T {
private Hashtable m;

public T(){
m=new Hashtable();
}

public void chargerhash(String n,String p){
m=new Hashtable();
m.put(n,p);
}

public void affichhash(){

Enumeration tar=m.keys();

System.out.println("le contenu de ton Htable:");
while (tar.hasMoreElements( )){
Object key = tar.nextElement( );
Object value = m.get(key);
System.out.println("le nom: "+key+"\nle prenom: "+value);
}
}

public void sauvegarder(){
try{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("hashtable.txt"));
oos.writeObject(this.m);
oos.close();
}catch(IOException e){
System.out.println("Problème de sauvegarde");
e.printStackTrace();
}
}

public void charger(){
try{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("hashtable.txt"));
this.m=(Hashtable)(ois.readObject());
ois.close();
}catch(Exception e){

}
}

public static void main(String a[]) throws IOException {
T mytp=new T();

Scanner scan=new Scanner(System.in);

System.out.println("donnez le nom du client");
String nom=scan.nextLine();

System.out.println("donnez le prenom du client");
String prenom=scan.nextLine();

mytp.chargerhash(nom,prenom);
mytp.affichhash();

mytp.sauvegarder();

T mytp2=new T();

mytp2.charger();
System.out.println("Contenu de la HTable après chargement");
mytp2.affichhash();
}
}
Messages postés
31
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
4 mai 2009

merci pour ton aide!!je vais pas faire de tros!mais je voulais savoir stp pourqu'oi est ce que t'as mis la référence this dans la méthode saugerder():oos.writeObject(this.m)

et puis dans la méthode charger() cette instruction qu'est ce qu'ele va effectuer exactemen:this.m=(Hashtable)(ois.readObject());


merci encor!!!!
Messages postés
31
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
4 mai 2009

merci pour ton aide!!je vais pas faire de tros!mais je voulais savoir stp pourqu'oi est ce que t'as mis la référence this dans la méthode saugerder():oos.writeObject(this.m)

et puis dans la méthode charger() cette instruction qu'est ce qu'ele va effectuer exactemen:this.m=(Hashtable)(ois.readObject());

sinon j'ai essayé de faire les deux méthode,bon ça compile mais je ne sais si c'est bon à faire ou non:

public void saveinfich(String s) throws IOException
{

FileWriter monfichier=new FileWriter("mokh.txt",true);

BufferedWriter bof=new BufferedWriter(monfichier);

monfichier.write(s);

bof.newLine();
bof.flush();

monfichier.close();
bof.close();

}

et :

public void load() throws Exception



{




Hashtable m=new Hashtable();
FileReader monfichier=new FileReader("mok.txt");

BufferedReader bof=new BufferedReader(monfichier);


while((l=bof.readLine()) != null)
{
r=bof.readLine();
mokh.put(l,r);

}




merci encor!!!!
Messages postés
69
Date d'inscription
lundi 4 février 2008
Statut
Membre
Dernière intervention
18 juin 2009
18
Ben le mot clé this tu n'est pas obligé de le metre c'est juste dire que c'est un attribut de classe de l'objet qui va execué la méthode, mais tu peu l'enlevé si tu veu sa nechangera rien.
Pour l'instruction: this.m=(Hashtable)(ois.readObject());
la méthod readObject va lire l'objet que tu as sauvegarder dans le fichier.
Cependant la méthode retourne un objet Object (c la classe la plus haute qui existe pour java, toutes les classe hérite de celle si), donc tu est obligé de caster cet objet (je ne sais pas si tu as déjà vu le cast). En fait vu que tu c ke l'objet est une Hashtable tu rajoute (Hashtable) pour forcer l'objet retourné par ois.readObject() à etre un objet HashTable.

Pour tes solutions, ben si sa marche c bon, de toutes façon ya plusieurs solutions, c toi ki voit:lol
Messages postés
31
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
4 mai 2009

bon vraiment merci à toi Godboss!!tes conseilles m'ont beaucoup aidés!
à bientot