IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Chargement et sauvegarde d'un pile d'objet


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Par défaut Chargement et sauvegarde d'un pile d'objet
    Salut,
    J'ai un petit pb:
    j'ai une pile sous forme de liste chainée ce qui me fait une classe PileObjet et une classe Cellule qui implementent toutes les 2 Serializable
    et j'aimerai pouvoir sauvegarder et charger une pile voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public void charger(){
    		String nomFich = Console.readString("Nom du fichier à charger: ");
    		File file;
    		FileInputStream fis;
    		ObjectInputStream ois;
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		if(file.exists()){
    			try{
    				fis = new FileInputStream(file);
    				ois = new ObjectInputStream(fis);
    				PileObject p = (PileObject)ois.readObject();
    				this.tete = tete;
    				ois.close();
    			}
    			catch(IOException err){
    				System.out.println("Erreur d'entrée/sortie "+err);
    			}
    			catch(ClassNotFoundException e){
    				System.out.println("Erreur d'entrée/sortie "+e);
    			}
    		}
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    	public void sauvegarder(){
    		String nomFich = Console.readString("Nom du fich pour sauegarder: ");
    		File file;
    		FileOutputStream fOutStream;
    		ObjectOutputStream sObjOutStream;
    		PileObject po = new PileObject();
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		if(file.exists()){
    			try{
    				fOutStream = new FileOutputStream(file);
    				sObjOutStream = new ObjectOutputStream(fOutStream);
    				sObjOutStream.writeObject(po);
    				fOutStream.close();
    				sObjOutStream.close();
    				sObjOutStream.flush();
    			}
    			catch(IOException err){
    				System.out.println("Erreur d'entrée/sortie "+err);
    				fOutStream = null;
    				sObjOutStream = null;
    			}
    		}
    Ces deux méthode se situent dans la classe PileObject.
    Je n'ai qu'une variable de classe qui est :
    et mon constructeur est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //CONSTRUCTEUR
    	public PileObject(){
    		tete = null;
    	}
    Les méthodes de sauvegarde et de chargement ne fonctionnent en fait seule la pile est sauvegardée (je crois!) et non les cellules s'y rapportant. Je pense que cela es du au fait que mon constructeur est vide mais je n'en suis pas sure.
    Comment je peux faire pour pouvoir sauvegarder et charger la pile et l'ensemble de ses cellules.
    Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Juste une remarque pour mieux comprendre ton problème d'abord. Dans ton code pour la méthode charger(), après avoir désérialisé ton objet, tu as le code

    C'est normal ça ? Parce qu'en fait là à aucun moment tu n'utilises la pile p que tu viens de charger... et j'ai comme l'impression que ce code revient en fait à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.tete = this.tete;
    Non ? Est-ce que tu ne devrais pas remplacer cette ligne par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.tete = p.tete;
    L'autre méthode je n'ai pas regardé encore, mais une chose après l'autre...

  3. #3
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Et en fait je viens de regarder quand même la méthode sauvegarder.
    Je ne comprends pas la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PileObject po = new PileObject();
    Parce qu'après comme tu sauvegarde po tu sauvegarde une liste vide avec une tete nulle. Alors est-ce que ça ne fonctionnerait pas mieux en enlevant cette ligne et en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sObjOutStream.writeObject(po);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sObjOutStream.writeObject(this);

  4. #4
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Par défaut
    Tout d'abord merci de m'avoir répondu!!

    J'ai essayé de faire ce que tu m'as conseiller - du coup j'obtient le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public void charger(){
    		String nomFich = Console.readString("Nom du fichier à charger: ");
    		File file;
    		FileInputStream fis;
    		ObjectInputStream ois;
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		if(file.exists()){
    			try{
    				fis = new FileInputStream(file);
    				ois = new ObjectInputStream(fis);
    				PileObject p = (PileObject)ois.readObject();
    				this.tete = p.tete;
    				ois.close();
    			}
    			catch(IOException err){
    				System.out.println("Erreur d'entrée/sortie "+err);
    			}
    			catch(ClassNotFoundException e){
    				System.out.println("Erreur d'entrée/sortie "+e);
    			}
    		}
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    	public void sauvegarder(){
    		String nomFich = Console.readString("Nom du fich pour sauegarder: ");
    		File file;
    		FileOutputStream fOutStream;
    		ObjectOutputStream sObjOutStream;
    	//	PileObject po = new PileObject();
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		if(file.exists()){
    			try{
    				fOutStream = new FileOutputStream(file);
    				sObjOutStream = new ObjectOutputStream(fOutStream);
    				sObjOutStream.writeObject(this);
    				fOutStream.close();
    				sObjOutStream.close();
    				sObjOutStream.flush();
    			}
    			catch(IOException err){
    				System.out.println("Erreur d'entrée/sortie "+err);
    				fOutStream = null;
    				sObjOutStream = null;
    			}
    		}
    	}
    Mais j'ai toujours le meme pb: pas d'erreur à la compil et aucune pile n'est chargé et aucun fichier n'est créé.
    Le fichier doit normalement etre créé dans le répertoire dans lequel je me trouve c'est bien ca??
    Car si c'est bien ca je n'ai rien du tout.
    Je te montre mon main pour que tu vois comment je m'en sers peut etre que ca te donnera une indication car je ne sais vraiment plus comment faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    import corejava.*;
     
    public class PileUser{
     
    	//MAIN
    	public static void main(String ags[]){
     
    		int choix=-1,rep;
    		PileObject po = new PileObject();	
     
    		do{
    			rep = Console.readInt("\nCHOIX\n1) Créer une nouvelle pile\n2) Charger une pile existante\n3) Quitter\n => ");
    			switch(rep){
    				case 1://NOUVELLE PILE
    					do{
    						choix = Console.readInt("\nCHOIX\n1) Dépiler\n2) Empiler\n3) Afficher\n4) Sauvegarder\n5) Quitter\n => "); 
    						switch(choix){
    							case 1:	//DEPILER
    										System.out.println("\nDEPILAGE");
    										try {
    											Object o = po.depiler();
    											System.out.println("L'élément dépilé est "+ o);
    										}
    										catch(PileVideException e){
    											e.printStackTrace();
    											System.out.println("La pile est vide - Impossible de dépiler");
    										}
    										break;
    							case 2:	//EMPILER
    										System.out.println("\nEMPILAGE");
    										Object o = Console.readString("Saisissez le nouvel objet à empiler: ");
    										po.empiler(o);
    										break;
    							case 3:	//AFFICHER
    										System.out.println("\nAFFICHAGE");
    										System.out.println(po);
    										break;
    							case 4:	//SAUVEGARDE
    										System.out.println("\nSAUVEGARDE");
    										po.sauvegarder();
    										break;
    							case 5:	break;
    						}
    					}while(choix!=5);
    					break;
    				case 2://CAHRGEMENT D'UNE PILE EXISTANTE
    						po.charger();
    						do{
    							choix = Console.readInt("\nCHOIX\n1) Dépiler\n2) Empiler\n3) Afficher\n4) Sauvegarder\n5) Quitter\n => "); 
    							switch(choix){
    								case 1:	//DEPILER
    											System.out.println("\nDEPILAGE");
    											try {
    												Object o = po.depiler();
    												System.out.println("L'élément dépilé est "+ o);
    											}
    											catch(PileVideException e){
    												e.printStackTrace();
    												System.out.println("La pile est vide - Impossible de dépiler");
    											}
    											break;
    								case 2:	//EMPILER
    											System.out.println("\nEMPILAGE");
    											Object o = Console.readString("Saisissez le nouvel objet à empiler: ");
    											po.empiler(o);
    											break;
    								case 3:	//AFFICHER
    											System.out.println("\nAFFICHAGE");
    											System.out.println(po);
    											break;
    								case 4:	//SAUVEGARDE
    											System.out.println("\nSAUVEGARDE");
    											po.sauvegarder();
    											break;
    								case 5:	break;
    							}
    						}while(choix!=5);
    						break;
    				default:
    						break;
    				}
    			}while(rep!=3);
    	}
    }//fin PileUser
    Sinon existe t-il une autre manière avec laquelle je pourrais sauvegarder mes cellules de pile??
    Merci d'avance

  5. #5
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Non c'est pas bien ça lol
    Ton fichier ne doit pas être sauvegardé dans le répertoire où tu te trouves puisque tu le mets dans le dossier renvoyé par System.getProperty("user.dir") qui, sous windows et si mes souvenirs sont bons, se trouve généralement dans C:\Documents and settings\<ton_nom>.

    Pour être sur, fais toi un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(file.getAbsolutePath());
    ...après la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file = new File(dir, nomFich);
    Ou alors si tu veux vraiment que le fichier soit dans ton répertoire de travail courant, remplace dir par "." dans la ligne ci-dessus ça devrait le faire...

    Dis-moi déjà si tu t'en sors avec ça je lirai ton main après lol

  6. #6
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(file.getAbsolutePath());
    me donne le chemin d'accès vers le répertoire ou se trouve tous mes programme c'est à dire mes classes: PileObject...
    Donc il s'agit bien de mon répertoire courant.
    Mais le pb c'est qu'aucun fichier n'est créé - j'ai regardé

  7. #7
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Alors là ça commence à m'intriguer... Est-ce que tu pourrais me filer tout ton code pour PileObject steplait que je puisse tester et débuguer chez moi ?

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Par défaut
    Ok pas de problème - Merci beaucoup
    Je te donne les differentes classes.

    PileObject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    import java.io.*;
    import corejava.*;
     
    public class PileObject implements Serializable{
     
    	private Cellule tete;
     
    	//CONSTRUCTEUR
    	public PileObject(){
    		tete = null;
    	}
     
    	//METHODES
    	public void empiler(Object o){
    		tete = new Cellule(o, tete);
    	}
     
    	public Object depiler() throws PileVideException {
    		//On décide de renvoyer l'entier qui a été supprimé.
    		if (estVide())
    			throw new PileVideException();
    		Object obj = tete.getElement();
    		tete = tete.getSuivant();
    		return obj;
    	}
     
    	public boolean estVide(){ 
    		return tete == null; 
    	}	
     
    	public String toString(){
    		String s = "";  
    		Cellule aux = tete;
    		while(aux != null){
    			s = s + aux.getElement().toString() + "\n";
    			aux=aux.getSuivant();
    		}
    		return s;
    	}
     
    	public void charger(){
    		String nomFich = Console.readString("Nom du fichier à charger: ");
    		File file;
    		FileInputStream fis;
    		ObjectInputStream ois;
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		if(file.exists()){
    			try{
    				fis = new FileInputStream(file);
    				ois = new ObjectInputStream(fis);
    				PileObject p = (PileObject)ois.readObject();
    				this.tete = p.tete;
    				ois.close();
    			}
    			catch(IOException err){
    				System.out.println("Erreur d'entrée/sortie "+err);
    			}
    			catch(ClassNotFoundException e){
    				System.out.println("Erreur d'entrée/sortie "+e);
    			}
    		}
    	}
     
    	public void sauvegarder(){
    		String nomFich = Console.readString("Nom du fich pour sauegarder: ");
    		File file;
    		FileOutputStream fOutStream;
    		ObjectOutputStream sObjOutStream;
    	//	PileObject po = new PileObject();
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		if(file.exists()){
    			try{
    				fOutStream = new FileOutputStream(file);
    				sObjOutStream = new ObjectOutputStream(fOutStream);
    				sObjOutStream.writeObject(this);
    				fOutStream.close();
    				sObjOutStream.close();
    				sObjOutStream.flush();
    			}
    			catch(IOException err){
    				System.out.println("Erreur d'entrée/sortie "+err);
    				fOutStream = null;
    				sObjOutStream = null;
    			}
    		}
    	}
     
    }//fin classe PileObject
    PileUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    import corejava.*;
     
    public class PileUser{
     
    	//MAIN
    	public static void main(String ags[]){
     
    		int choix=-1,rep;
    		PileObject po = new PileObject();	
     
    		do{
    			rep = Console.readInt("\nCHOIX\n1) Créer une nouvelle pile\n2) Charger une pile existante\n3) Quitter\n => ");
    			switch(rep){
    				case 1://NOUVELLE PILE
    					do{
    						choix = Console.readInt("\nCHOIX\n1) Dépiler\n2) Empiler\n3) Afficher\n4) Sauvegarder\n5) Quitter\n => "); 
    						switch(choix){
    							case 1:	//DEPILER
    										System.out.println("\nDEPILAGE");
    										try {
    											Object o = po.depiler();
    											System.out.println("L'élément dépilé est "+ o);
    										}
    										catch(PileVideException e){
    											e.printStackTrace();
    											System.out.println("La pile est vide - Impossible de dépiler");
    										}
    										break;
    							case 2:	//EMPILER
    										System.out.println("\nEMPILAGE");
    										Object o = Console.readString("Saisissez le nouvel objet à empiler: ");
    										po.empiler(o);
    										break;
    							case 3:	//AFFICHER
    										System.out.println("\nAFFICHAGE");
    										System.out.println(po);
    										break;
    							case 4:	//SAUVEGARDE
    										System.out.println("\nSAUVEGARDE");
    										po.sauvegarder();
    										break;
    							case 5:	break;
    						}
    					}while(choix!=5);
    					break;
    				case 2://CHARGEMENT D'UNE PILE EXISTANTE
    						po.charger();
    						do{
    							choix = Console.readInt("\nCHOIX\n1) Dépiler\n2) Empiler\n3) Afficher\n4) Sauvegarder\n5) Quitter\n => "); 
    							switch(choix){
    								case 1:	//DEPILER
    											System.out.println("\nDEPILAGE");
    											try {
    												Object o = po.depiler();
    												System.out.println("L'élément dépilé est "+ o);
    											}
    											catch(PileVideException e){
    												e.printStackTrace();
    												System.out.println("La pile est vide - Impossible de dépiler");
    											}
    											break;
    								case 2:	//EMPILER
    											System.out.println("\nEMPILAGE");
    											Object o = Console.readString("Saisissez le nouvel objet à empiler: ");
    											po.empiler(o);
    											break;
    								case 3:	//AFFICHER
    											System.out.println("\nAFFICHAGE");
    											System.out.println(po);
    											break;
    								case 4:	//SAUVEGARDE
    											System.out.println("\nSAUVEGARDE");
    											po.sauvegarder();
    											break;
    								case 5:	break;
    							}
    						}while(choix!=5);
    						break;
    				default:
    						break;
    				}
    			}while(rep!=3);
    	}
    }//fin PileUser
    PileVideException
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class PileVideException extends Exception{
    	public PileVideException(){}
    }
    Cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    import java.io.*;
        public class Cellule implements Serializable { 
     
          private Object element; 
          private Cellule suivant;
     
       //CONSTRUCTEURS 
           public Cellule (Object o){ 
             this(o, null); 
          } 
     
           public Cellule(Object o, Cellule suivant){ 
             element = o; 
             this.suivant = suivant; 
          } 
     
       //METHODES DE SERVICE
           public Object getElement(){ return (element); } 
     
           public void setElement(Object o){ element = o; } 
     
           public Cellule getSuivant(){ return (suivant); } 
     
           public void setSuivant(Cellule c){ suivant = c; } 
     
     
       }//fin classe Cellule
    Comme tu as pu le voir le main est dans la classe PileUser parce qu'ils veulent qu'on fasse comme ca à la fac.
    Encore merci

  9. #9
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Mais oui mais c'est bien sur que je suis c*** ton ObjectOutputStream il est tamponné, c'est à dire que quand tu fais un writeObject() ça écrit pas directement dans le fichier mais dans un tampon qui n'est effectivement vidé qu'à deux conditions :
    - soit quand le tampon est plein
    - ou alors quand tu fais un flush sur ton ObjectOutputStream

    Et l'idéal c'est même de toujours faire un close() sur ton ObjectOutputStream une fois que tu as fait ton writeObject() comme ça il fait un flush() automatiquement...

    Je me taperais des fois...

    Je vais tester pour être sur que c'est ça mais normalement ça vient de là...

  10. #10
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Euh non en fait je me suis un peu affolé vite fait mais je vois que tu l'as très bien fait...

  11. #11
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    On va y arriver je crois que je l'ai : pourquoi tu fais un if(file.exists()) avant d'écrire dans ton fichier.

    Attention le "new File" ne crée qu'un fichier virtuel, il ne crée pas de fichier sur le disque, donc forcément le test est toujours faux...

  12. #12
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Par défaut
    J'ai enlevé le if(file.exists()) - et quand je fais charger une pile existante j'ai l'erreur suivante:
    Erreur d'entrée/sortie java.io.FileNotFoundException: C:\Documents and Settings\Aurélie SIMON\Mes documents\Java\Java2Dec\Pile\test (Le fichier spécifié est introuvable)
    En gros il ne trouve pas le fichier que j'ai créé. Le pb c'est comment je peux savoir si mon fichier est rééellement créé??

  13. #13
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    //import corejava.*;
     
    import java.io.*;
     
    public class PileObject implements Serializable{
     
    	private Cellule tete;
     
    	//CONSTRUCTEUR
    	public PileObject(){
    		tete = null;
    	}
     
    	//METHODES
    	public void empiler(Object o){
    		tete = new Cellule(o, tete);
    	}
     
    	public Object depiler() throws PileVideException{
    		//On décide de renvoyer l'entier qui a été supprimé.
    		if(estVide())
    			throw new PileVideException();
    		Object obj = tete.getElement();
    		tete = tete.getSuivant();
    		return obj;
    	}
     
    	public boolean estVide(){
    		return tete == null;
    	}
     
    	public String toString(){
    		String s = "";
    		Cellule aux = tete;
    		while(aux != null){
    			s = s + aux.getElement().toString() + "\n";
    			aux = aux.getSuivant();
    		}
    		return s;
    	}
     
    	public void charger(){
    		String nomFich = Console.readString("Nom du fichier à charger: ");
    		File file;
    		FileInputStream fis;
    		ObjectInputStream ois;
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		//System.out.println(file.getAbsolutePath());
     
    		if(file.exists()){
    			try{
    				fis = new FileInputStream(file);
    				ois = new ObjectInputStream(fis);
    				PileObject p = (PileObject)ois.readObject();
    				this.tete = p.tete;
    				ois.close();
    			}
    			catch(IOException err){
    				System.out.println("Erreur d'entrée/sortie " + err);
    			}
    			catch(ClassNotFoundException e){
    				System.out.println("Erreur d'entrée/sortie " + e);
    			}
    		}
    		else{
    			System.out.println("Ce fichier n'existe pas. Désolé...");
    		}
    	}
     
    	public void sauvegarder(){
    		String nomFich = Console.readString("Nom du fich pour sauegarder: ");
    		File file;
    		FileOutputStream fOutStream;
    		ObjectOutputStream sObjOutStream;
    		//   PileObject po = new PileObject();
    		String dir = System.getProperty("user.dir");
    		file = new File(dir, nomFich);
     
    		//System.out.println(file.getAbsolutePath());
     
    		if(file.exists()){
    			String overwriteConfirm =
    					Console.readString("Attention, ce fichier existe déjà ! Etes-vous sur de vouloir l'écraser ? (o/n)");
    			if(!"o".equalsIgnoreCase(overwriteConfirm)) return;
    		}
    		try{
    			fOutStream = new FileOutputStream(file);
    			sObjOutStream = new ObjectOutputStream(fOutStream);
    			sObjOutStream.writeObject(this);
    			fOutStream.close();
    			sObjOutStream.close();
    			sObjOutStream.flush();
    		}
    		catch(IOException err){
    			System.out.println("Erreur d'entrée/sortie " + err);
    			fOutStream = null;
    			sObjOutStream = null;
    		}
    	}
    }//fin classe PileObject
    Voilà ce que je te suggère...
    La j'ai testé normalement ça le fait...
    J'ai modifié que cette classe, dans les méthodes sauvegarder et charger

  14. #14
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    C'était dans le sauvegarder qu'il fallait enlever le if(file.exists())...
    Mais regarde ce que j'ai fait pour essayer de rester aussi convivial que toi

    PS : Alors c'est bel et bien vrai, ce n'est pas un mythe, il y a des filles qui font de l'info, et du Java en plus !!! C'est bien ! Continue je te soutiens ya trop de testostérone la dedans lol

  15. #15
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Par défaut
    ca marche super bien ca me fait plaisir. Je te remercie c'est tres gentil de ta part. Je regarderai ca de plus pres demain car il se fait tard!
    Peut etre à un autre jour
    Bye

  16. #16
    Membre éclairé
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Par défaut
    Je te prie... Ca fait plaisir...
    Ici il est encore tot 8)

    Bon courage @+++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2011, 10h15
  2. Chargement et sauvegarde d'une table Access
    Par feldi dans le forum VB.NET
    Réponses: 8
    Dernier message: 03/06/2010, 08h37
  3. Allocation sur la pile d'objet QOBJECT dans le .h
    Par guillaume07 dans le forum Qt
    Réponses: 3
    Dernier message: 27/12/2009, 20h10
  4. [C#][Génériques] Pile d'objets
    Par Nadd dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/08/2006, 11h22
  5. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo