pb de lecture d'objets dans un fichier
Bonjour à tous,
J'ai transposé ce que j'avais fait sur un autre exercice... cela marchait mais là j'ai une erreure.
2 classes : Batiment et Module (un batiment contient des modules)
1 classe Main
1 classe charger
1 classe sauvegarder
Le problème c'est qu'au chargement, normalement, je devrais retrouver mon batiment à la fin du chargement. Ici, il retourne "none".
Je n'arrive pas à voir si c'est une pb d'écriture de la sauvegarde, un pb de lecture (sachant qu'il me lancer une EOFException (j'avais pas eu avant... est ce parce qu'il ne trouve pas la fin de l'objet et continue à lire)
bref, voici mes classes et les erreurs si vous pouvez jeter un oeil...
L'erreur si je retire dans charger la catche (EOFException):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Chargement du bâtiment
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2681)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3156)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
at aaaProjetJAVA.Charger.chargerBat(Charger.java:32)
at aaaProjetJAVA.Main.main(Main.java:7)
Fin de lecture
Exception in thread "main" java.lang.NullPointerException
at aaaProjetJAVA.Main.main(Main.java:9) |
Batiment :
Code:
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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
package aaaProjetJAVA;
import java.io.Serializable;
import java.util.*;
public class Batiment implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private static int nombreDeBatiment = 0;
private static List<Batiment> listeDesBatiments = new ArrayList<>();
private int idBatiment;
private String nomBatiment;
private ArrayList<Module> listeDesModulesDuBatiment;
private int nombreDeModules;
// Constructeur
public Batiment(String nom) {
idBatiment = Batiment.getNombreDeBatiment();
nomBatiment = nom;
nombreDeModules = 0;
listeDesModulesDuBatiment = new ArrayList<>();
// mise à jour des statiques dans le constructeur :
Batiment.setNombreDeBatiment(1);
Batiment.addBatiments(this);
}
// *********** méthode statique ***********
// get nombre de batiment
public static int getNombreDeBatiment() {
return nombreDeBatiment;
}
private static void setNombreDeBatiment(int nombreDeBatimentAAjouter) {
Batiment.nombreDeBatiment += nombreDeBatimentAAjouter;
}
// get Liste des Batiments
public static List<Batiment> getListeDesBatiments() {
return listeDesBatiments;
}
private static void addBatiments(Batiment batimentAAjouter) {
Batiment.listeDesBatiments.add(batimentAAjouter);
}
// destructeur de bâtiment
public static void detruireBatiment(Batiment batimentADetruire) {
if (listeDesBatiments.contains(batimentADetruire)) {
listeDesBatiments.remove(batimentADetruire);
Batiment.setNombreDeBatiment(-1);
}
}
// *********** méthode non statique ***********
// To String
@Override
public String toString() {
String texte = "\n";
if (listeDesBatiments == null) {
texte += "Il n'y a aucun bâtiment construit";
return texte;
} else {
texte += "Le bâtiment n°" + this.idBatiment + " se nomme " + this.nomBatiment;
if (this.nombreDeModules == 0) {
texte += "\nIl ne possède aucun module\n\n";
return texte;
} else {
texte += "\nIl possède " + this.nombreDeModules + " modules";
texte += "\nSes modules sont :";
for (int i = 0; i < nombreDeModules; i++) {
System.out.println("\n");
texte += this.getListeDesModules().get(i).toString();
}
texte += "\nFin des modules\n\n";
return texte;
}
}
}
// Getters and Setters
// Get ID (SET id à la construction)
public int getIdBatiment() {
return idBatiment;
}
// Get et Set NOM
public String getNomBatiment() {
return nomBatiment;
}
public void setNomBatiment(String nomBatiment) {
this.nomBatiment = nomBatiment;
}
// nombreDeModule
public int getNombreDeModules() {
return nombreDeModules;
}
private void setNombreDeModules(int nombreDeModules) {
this.nombreDeModules += nombreDeModules;
}
// Liste des Modules
public List<Module> getListeDesModules() {
return listeDesModulesDuBatiment;
}
private void addModule(Module moduleAAjouter) {
if (moduleAAjouter != null) {
this.listeDesModulesDuBatiment.add(moduleAAjouter);
this.setNombreDeModules(1);
}
}
public void retirerModule(int numRFID) {
if (this.nombreDeModules != 0) {
for (int i = 0; i < this.getNombreDeModules(); i++) {
if (numRFID == this.getListeDesModules().get(i).getRFIDModule()) {
this.listeDesModulesDuBatiment.remove(i);
this.setNombreDeModules(-1);
}
}
}
}
public void CreerEtAjouterNouveauModule(int numRFID, String nom) {
Module nouveauModule = new Module(numRFID, nom);
this.addModule(nouveauModule);
System.out
.println("Nouveau module " + nouveauModule.getNomModule() + ", N°RFID=" + nouveauModule.getRFIDModule()
+ " a été crée et ajouté au batiment " + this.nomBatiment + ", id=" + this.getIdBatiment());
}
public void ajoutModuleAtteignable(int numRFIDModuleConcerne, int numRFIDModuleAtteignable) {
for (int i = 0; i < this.nombreDeModules; i++) {
if (this.getListeDesModules().get(i).getRFIDModule() == numRFIDModuleConcerne) {
this.getListeDesModules().get(i).addModuleAtteignable(numRFIDModuleAtteignable);
}
}
}
public void retraitModuleAtteignable(int numRFIDModuleConcerne, int numRFIDModuleAtteignable) {
for (int i = 0; i < this.nombreDeModules; i++) {
if (this.getListeDesModules().get(i).getRFIDModule() == numRFIDModuleConcerne) {
/*if (this.getListeDesModules().get(i).getListeDesRFIDDesModulesAtteignable()
.contains((Integer) numRFIDModuleAtteignable)) {*/
this.getListeDesModules().get(i).removeModuleAtteignable(numRFIDModuleAtteignable);
//}
}
}
}
// fin de classe
} |
Sauvegarder :
Code:
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
|
package aaaProjetJAVA;
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.util.Scanner;
public class Sauvegarde {
public static void sauvegarderBatiment(Batiment batiment) {
System.out.println("\nSauvegarde des bâtiments\n");
// création fichier
ObjectOutputStream oos;
try {
File file = new File("batiments.dat");
FileOutputStream stream = new FileOutputStream(file);
BufferedOutputStream buffer = new BufferedOutputStream(stream);
oos = new ObjectOutputStream(buffer);
oos.writeObject(batiment);
} catch (IOException e) {
e.printStackTrace();
}
}
} |
Charger :
Code:
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
|
package aaaProjetJAVA;
import java.io.BufferedInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Scanner;
public class Charger {
public static Batiment chargerBat() {
// ***************************************************************
// Démarrage - verification de la présence du batiment enregistré ou
// ***************************************************************
System.out.println("Chargement du bâtiment");
// Chargement du bâtiment
// création du flux en dehors du try
ObjectInputStream ois = null;
Batiment batim = null;
Scanner sc = null;
sc = new Scanner(System.in);
try {
// Si le batiment existe, il est chargé
ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("batiments.dat"))));
batim = (Batiment) ois.readObject();
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
} catch (FileNotFoundException e) {
// cette exception se déclenche si le fichier n'a pas été trouvé,
// Il faut donc créer un batiment
String nomBatiment;
// Interrogation
System.out.println("Aucun bâtiment n'a été trouvé");
System.out.println("Veuillez entrer un nom pour votre bâtiment :");
nomBatiment = sc.nextLine();
batim = new Batiment(nomBatiment);
Sauvegarde.sauvegarderBatiment(batim);
System.out.println("\n\n");
// création du flux de lecture
} catch (EOFException eofE){
// fin du fichier
}
catch (IOException ioe) {
ioe.printStackTrace();
}
System.out.println("\nFin de lecture \n");
// System.out.println(batim.toString());
// sc.close();
return batim;
}
} |
Main :
Code:
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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
package aaaProjetJAVA;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Batiment batiment0 = Charger.chargerBat();
////Batiment batiment =
System.out.println(batiment0.toString());
/*
System.out.println("\nNombre de batiment construit : " + Batiment.getNombreDeBatiment());
System.out.println("Liste des batiments construit : ");
if (Batiment.getListeDesBatiments().isEmpty()) {
System.out.println("Il n'y a aucun bâtiment construit");
} else {
System.out.println(Batiment.getListeDesBatiments().toString());
}
System.out.println("\n\nConstruction de deux bâtiments ....\n\n");
Batiment bat0 = new Batiment("Batiment0");
Batiment bat1 = new Batiment("Batiment1");
System.out.println("\nNombre de batiment construit : " + Batiment.getNombreDeBatiment());
System.out.println("Liste des batiments construit : ");
if (Batiment.getListeDesBatiments().isEmpty()) {
System.out.println("Il n'y a aucun bâtiment construit");
} else {
for (int i = 0; i < Batiment.getNombreDeBatiment(); i++) {
System.out.println(Batiment.getListeDesBatiments().get(i).toString());
}
}
// création d'un module
System.out.println("\n\n\nCréation d'un module pour le bâtiment : bat0");
bat0.CreerEtAjouterNouveauModule(100,"Module0duBat0");
if (bat0.getNombreDeModules() == 0) {
System.out.println(
"Il n'y a aucun module dans le batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment());
} else {
System.out.println(
"Les modules du batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment() + " sont :");
for (int i = 0; i < bat0.getNombreDeModules(); i++) {
System.out.println("\n" + bat0.getListeDesModules().get(i).toString());
}
}
// création d'un autre module
System.out.println("\n\n\nCréation d'un autre module pour le bâtiment : bat0");
bat0.CreerEtAjouterNouveauModule(101,"Module1duBat0");
if (bat0.getNombreDeModules() == 0) {
System.out.println(
"Il n'y a aucun module dans le batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment());
} else {
System.out.println(
"Les modules du batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment() + " sont :");
for (int i = 0; i < bat0.getNombreDeModules(); i++) {
System.out.println("\n" + bat0.getListeDesModules().get(i).toString());
}
}
System.out.println(bat0.getNombreDeModules());
// suppression d'un module
bat0.retirerModule(0);
System.out.println("\n\n\n");
if (bat0.getNombreDeModules() == 0) {
System.out.println(
"Il n'y a aucun module dans le batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment());
} else {
System.out.println(
"Les modules du batiment " + bat0.getNomBatiment() + ", id=" + bat0.getIdBatiment() + " sont :");
for (int i = 0; i < bat0.getNombreDeModules(); i++) {
System.out.println("\n" + bat0.getListeDesModules().get(i).toString());
}
}
// création d'un autre module
System.out.println("\n\n\nCréation d'un autre module pour le bâtiment : bat0");
bat0.CreerEtAjouterNouveauModule(102,"Module2duBat0");
// création d'un autre module
System.out.println("\n\n\nCréation d'un autre module pour le bâtiment : bat0");
bat0.CreerEtAjouterNouveauModule(103,"Module3duBat0");
// liste des bâtiments
System.out.println("Liste des batiments construit : ");
if (Batiment.getListeDesBatiments().isEmpty()) {
System.out.println("Il n'y a aucun bâtiment construit");
} else {
for (int i = 0; i < Batiment.getNombreDeBatiment(); i++) {
System.out.println(Batiment.getListeDesBatiments().get(i).toString());
}
}
System.out.println(bat0.getListeDesModules().toString());
System.out.println("retrait module");
bat0.retirerModule(101);
bat0.retirerModule(102);
System.out.println(bat0.getListeDesModules().toString());
System.out.println("Ajout module atteignable");
bat0.ajoutModuleAtteignable(100, 105);
bat0.ajoutModuleAtteignable(100, 103);
bat0.ajoutModuleAtteignable(100, 150);
System.out.println(bat0.toString());
System.out.println("retrait module atteignable");
bat0.retraitModuleAtteignable(100, 103);
System.out.println(bat0.toString());
Sauvegarde.sauvegarderBatiment(bat0);
*/
//Sauvegarde.sauvegarderBatiment(batiment);
//
} // accolade de fin du main
} |