Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de Serializable avec une collection

    8 novembre 2019 à 22:03:23

    Bonjour,

    J'ai un object de type List<Vehicule> this.vehicules que je récupère d'une sérialisation auquel j'ajoute un élément à la liste (donc une voiture bien logiquement) et ensuite je le sérialise à nouveau dans le même fichier. 

    Le problème c'est que au lieu de remplacer l'ancien object dans le fichier, il le rajoute à la suite. Comment faire pour qu'il remplace l'ancien objet sérialisé dans le fichier par le nouveau.

     ObjectOutputStream oos;
    	ObjectInputStream ois;
    	public List<Vehicule> vehicules = new ArrayList<Vehicule>();
    	Path path = Paths.get("object.txt");
    	public void addVoiture(Vehicule vehicule) {
    			
    			this.vehicules = deSerializ();
    			if(!this.vehicules.contains(vehicule)) {
    				this.vehicules.add(vehicule);
    			}
    			serializ(this.vehicules);
    	}
    private List<Vehicule> deSerializ() {
    		List<Vehicule> listVehicules = new ArrayList<Vehicule>();
    		try(InputStream input = Files.newInputStream(path)){
    			ois = new ObjectInputStream(new BufferedInputStream(input));
    			listVehicules = (List<Vehicule>)ois.readObject();
    			ois.close();
    			
    		}
    		catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}	
    		catch (IOException e) {
    			e.printStackTrace();
    		}	
    		return listVehicules;
    
    	}
    
    	private void serializ(List<Vehicule> vehicules) {
    		try(OutputStream output = Files.newOutputStream(path)){
    			oos = new ObjectOutputStream(new BufferedOutputStream(output));
    			oos.writeObject(vehicules);
    			oos.close();
    			
    		}
    		catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}	
    		catch (IOException e) {
    			e.printStackTrace();
    		}
    	}



    Actuellement, je supprime et récrée le fichier dans le constructeur, mais j'aimerai comprendre pourquoi la méthode habituelle ne fonctionne pas.

    Merci d'avance

    -
    Edité par bbsebb 8 novembre 2019 à 22:04:34

    • Partager sur Facebook
    • Partager sur Twitter

    << On n'apprend bien qu'à force de se tromper. >>

      11 novembre 2019 à 13:35:27

      Salut,

      Tu ne dois pas avoir fait un equals sur ton objet Vehicule je pense ?

      Il faut se méfier quand on utilise contains car elle utilise le equals des éléments de la liste qu'elle lit. Dans la javadoc on trouve :

      "returns <tt>true</tt> if and only if this list contains at least one element <tt>e</tt> such that <tt>(o==null ? e==null : o.equals(e))</tt>."

      Donc assure-toi que la méthode equals est bien fiable, et surcharge-la si il faut.

      • Partager sur Facebook
      • Partager sur Twitter

      Problème de Serializable avec une collection

      × 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