2017-08-11 2 views
0

Je veux construire un objet qui a le comportement suivant:Comment enregistrer un objet dans Java? Désérialisation dans le constructeur

Si le fichier « save_object » est vide ou n'existe pas créer l'objet par défaut autre récupérer l'objet qui est dans la Je sais que je vais utiliser le Serialization How to write and read java serialized objects into a file Mais je veux le faire dans la classe et je ne sais pas comment le faire.

J'ai essayé avec ce code (Désolé, j'ai juste une partie, si elle est needeed, je le reste, dès que possible)

public class Garage implements Serializable 
{ 
    private List<String> cars; 

    public Garage() 
    { 
     File garageFile = new File("garage.txt"); 
     if(!garageFile.exists() || garageFile.length()==0) 
     { 
      cars = new List<String>; 
      System.out.println("Aucune voiture sauvegardée"); 
     } 
     else 
     { 
      ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(garageFile))); 
      this = (Garage)ois.readObject(); 
     } 
    } 
} 

J'ai un problème avec this = (Garage)ois.readObject(); et je ne savoir comment le gérer. J'ai quelques idées mais toutes sont de faire un attribut par un et si c'est possible, je préfère éviter de faire cela

+0

2 choses dont nous avons besoin : –

+0

1: code postal qui compile donc nous pouvons vérifier/reproduire les choses ici ... –

+0

2: *** J'ai un problème avec ceci = (Garage) ois.readObject(); *** est très large ... messages d'erreur doivent être placés ici aussi –

Répondre

1

votre classe devient compliquée et mal développée parce que vous ne partagez pas les responsabilités de chaque module dans l'application, ce que vous essayez de faire doit être le travail d'une classe , cette classe est la responsabilité de vérifier si le fichier existe ou non ainsi que vous donner un objet garage (soit nouveau créé ou restauré/désérialisé à partir du disque)

et exemple de ce gestionnaire peut ressembler est:

class GarageManager { 

    public static Garage GetGarage(String garagePath) 
      throws FileNotFoundException, IOException, ClassNotFoundException { 
     Garage x = null; 
     File garageFile = new File(garagePath); 
     if (!garageFile.exists() || garageFile.length() == 0) { 
      ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(garageFile))); 
      x = (Garage) ois.readObject(); 
      ois.close(); 
     } else { 
      x = new Garage(); 
     } 
     return x; 
    } 
} 
+1

Ok dans l'application générale. Ici, c'est un exercice (désolé en français http://exercices.openclassrooms.com/assessment/63?login=291463&tk=bb5924474ed7ca20fd3bb5d200e1431a&sbd=2016-02-01&sbdtk=fa78d6dd3126b956265a25af9b322d55) Et il n'y a pas de GarageManager – Ccile