Partage
  • Partager sur Facebook
  • Partager sur Twitter

[TP Garage] Sérialisation du garage

    11 novembre 2014 à 22:02:29

    Bonsoir,

    Voici mon code pour la classe Garage :

    package tpJava;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Garage implements Serializable {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -8907144462431849384L;
    
    	private List<Vehicule> voitures = new ArrayList<Vehicule>();;
    	public ObjectOutputStream oos;
    	public ObjectInputStream ois;
    
    	public Garage() {
    		try {
    			ois = new ObjectInputStream(new BufferedInputStream(
    					new FileInputStream(new File("garage.txt"))));
    			try {
    				System.out.println(((Garage)ois.readObject()).toString());
    			} catch (ClassNotFoundException e) {
    				e.printStackTrace();
    			}
    			
    			ois.close();
    
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public String toString() {
    		String str = "";
    		if (voitures.size() == 0)
    			str += "Aucune voiture sauvegardée !\n";
    		str += "***************************\n";
    		str += "*  Garage OpenClassrooms  *\n";
    		str += "***************************\n";
    		/*for (int i = 0; i < voitures.size(); i++) {
    			str += voitures.get(i).toString();
    		}*/
    		return str;
    	}
    
    	protected void addVoiture(Vehicule v) {
    		try {
    			oos = new ObjectOutputStream(new BufferedOutputStream(
    					new FileOutputStream(new File("garage.txt"))));
    			oos.writeObject(voitures.add(v));
    			oos.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    Une première exécution me donne cette erreur :

    java.io.FileNotFoundException: garage.txt (Le fichier spécifié est introuvable)

    at java.io.FileInputStream.open(Native Method)

    at java.io.FileInputStream.<init>(Unknown Source)

    at tpJava.Garage.<init>(Garage.java:29)

    at tpJava.Main.main(Main.java:7)

    Aucune voiture sauvegardée !

    ***************************

    *  Garage OpenClassrooms  *

    ***************************

    Et la seconde celle-là :

    Exception in thread "main" java.lang.ClassCastException: java.lang.Boolean cannot be cast to tpJava.Garage

    at tpJava.Garage.<init>(Garage.java:31)

    at tpJava.Main.main(Main.java:7)


    Si quelqu'un peut m'aider, merci beaucoup !

    • Partager sur Facebook
    • Partager sur Twitter
      11 novembre 2014 à 22:22:43

      Salut Scholes18,

      Bon déjà la première exécution donne une exception claire : le fichier n'existait pas à la lecture (ligne 29).

      Ensuite, pour la seconde exception, ça vient de ta ligne 31 d'après l'exception (ClassCastException), il faut regarder les cast que tu fais. Visiblement le seul cast que tu fais à cette ligne est (Garage)ois.readObject().

      Je soupçonne donc que ta sérialisation a été hasardeuse puisque ton reader lit un booléen alors que tu attends un Garage.

      Peux-tu fournir le code de ton main pour vérifier ce que tu y fais ?

      Bonne soirée,

      AdricoM

      -
      Edité par AdricoM 11 novembre 2014 à 22:29:25

      • Partager sur Facebook
      • Partager sur Twitter
        11 novembre 2014 à 22:31:35

        Pourtant le fichier se créée bien à la seconde exécution, voici son contenu (illisible) : "¬í sr java.lang.BooleanÍ r€Õœúî Z valuexp"

        Voilà pour le main :

        package tpJava;
        
        public class Main {
        
        	public static void main(String[] args) {
        
        		Garage garage = new Garage();
        		System.out.println(garage);
        
        		Vehicule lag1 = new Lagouna(15000d);
        		lag1.setMoteur(new MoteurEssence("150 Chevaux", 10256d));
        		lag1.addOption(new GPS());
        		lag1.addOption(new SiegeChauffant());
        		lag1.addOption(new VitreElectrique());
        		garage.addVoiture(lag1);
        
        		Vehicule A300B_2 = new A300B();
        		A300B_2.setMoteur(new MoteurElectrique("1500 W", 1234d));
        		A300B_2.addOption(new Climatisation());
        		A300B_2.addOption(new BarreDeToit());
        		A300B_2.addOption(new SiegeChauffant());
        		garage.addVoiture(A300B_2);
        
        		Vehicule d4_1 = new D4();
        		d4_1.setMoteur(new MoteurDiesel("200 Hdi", 25684.80d));
        		d4_1.addOption(new BarreDeToit());
        		d4_1.addOption(new Climatisation());
        		d4_1.addOption(new GPS());
        		garage.addVoiture(d4_1);
        
        		Vehicule lag2 = new Lagouna();
        		lag2.setMoteur(new MoteurDiesel("500 Hdi", 456987d));
        		garage.addVoiture(lag2);
        
        		Vehicule A300B_1 = new A300B();
        		A300B_1.setMoteur(new MoteurHybride("ESSENCE/Electrique", 12345.95d));
        		A300B_1.addOption(new VitreElectrique());
        		A300B_1.addOption(new BarreDeToit());
        		garage.addVoiture(A300B_1);
        
        		Vehicule d4_2 = new D4();
        		d4_2.setMoteur(new MoteurElectrique("100 KW", 1224d));
        		d4_2.addOption(new SiegeChauffant());
        		d4_2.addOption(new BarreDeToit());
        		d4_2.addOption(new Climatisation());
        		d4_2.addOption(new GPS());
        		d4_2.addOption(new VitreElectrique());
        		garage.addVoiture(d4_2);
        
        	}
        
        }
        


        Merci ^^

        -
        Edité par Scholes18 11 novembre 2014 à 22:32:42

        • Partager sur Facebook
        • Partager sur Twitter

        [TP Garage] Sérialisation du garage

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown