Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec la sérialisation

eof trop tôt !!

Sujet résolu
    27 janvier 2009 à 17:36:41

    !onjour à tous,

    Je suis actuellement en train de créer un gestionnaire de planning dans le cadre de mon stage, et c'est la première fois que j'ai à utiliser du Java. J'ai réussi grâce au tuto de Cysboy à créer une interface graphique, à gérer la saisie... enfin plein de choses dont je ne me sentais pas capable, et pourtant !! Comme quoi le site du zéro est vraiment pédagogue et efficace !

    Enfin bon, c'était trop beau pour durer, et me voilà devant un problème que j'ai vraiment du mal à résoudre. Je vous explique : une fois la saie réalisée, je veux sauvegarder les données, et ceci grâce à la sérialisation. Cependant il faut récupérer les données déjà présentent dans le fichier, donc vérifier qu'il y en a. Une fois ceci fait je les réécris dans le fichier, et j'ajoute la nouvelle entrée (enfin j'essaye). Voici le code de cette tâche :

    // lecture du fichier
                	   	try {
                	   		
                    		fis = new FileInputStream(file);
                    		bis = new BufferedInputStream(fis);
                    		ois = new ObjectInputStream(bis);
                    			
                    		boolean hasObject = true;
                    		i = 0;
                            
                    		
    	                		while(hasObject) {
    	                			
    	                        	try {
    	                        		tabTache[i].setTache(((Tache)ois.readObject()).getTache());
    	                        		tabTache[i].setHeightCel(((Tache)ois.readObject()).getHeightCel());
    	                        		tabTache[i].setWidthCel(((Tache)ois.readObject()).getWidthCel());
    	                        		tabTache[i].setPosCelX(((Tache)ois.readObject()).getPosCelX());
    	                        		tabTache[i].setPosCelY(((Tache)ois.readObject()).getPosCelY());
    	                        		tabTache[i].setCouleurFond(((Tache)ois.readObject()).getCouleurFond());
    	                        		tabTache[i].setCouleurTexte(((Tache)ois.readObject()).getCouleurTexte());
    	                        		tabTache[i].setCouleurBordure(((Tache)ois.readObject()).getCouleurBordure());
    	                        		tabTache[i].setFreq(((Tache)ois.readObject()).getFreq());
    	                        		System.out.println("posCelX : " + tabTache[i].getPosCelX());
    		                        	i++;
    	                        	} catch(EOFException eof) {
    	                        		hasObject = false;
    	                        		System.out.println("eof");
    	                        	} catch (ClassNotFoundException e) {
    									// TODO Auto-generated catch block
    									e.printStackTrace();
    									System.out.println("classnotfound");
    								}
    	                		} // fin while
                    		
    						
                             
                            // fermeture du flux d'entree 
    						ois.close();
    						
    						System.out.println("Lecture du fichier : " + i + " élément(s) lu(s)");
    						
    						
    					} catch(FileNotFoundException e) {
                    		e.printStackTrace();
                    	} catch(EOFException eof) {
                    		eof.printStackTrace();
                    	} catch (IOException e) {
                    		e.printStackTrace();
                    	}
                	} // fin si la taille du fichier > 0
                		
    				// ajout des entrées
                    	try {
    //                		Création de l'objet
                			
                    		fos = new FileOutputStream(file);
                    		bos = new BufferedOutputStream(fos);
                    		oos = new ObjectOutputStream(bos);
                    		
                    		for(j = 0 ; j < i ; j++) {
                    			oos.writeObject(new Tache(tabTache[j].getTache(), tabTache[j].getHeightCel(), tabTache[j].getWidthCel(), tabTache[j].getPosCelX(), tabTache[j].getPosCelY(), tabTache[j].getCouleurFond(), tabTache[j].getCouleurTexte(), tabTache[j].getCouleurBordure(), tabTache[j].getFreq()));
                    		}
                    		oos.writeObject(new Tache(tab.getMaTache().getTache(), tab.getMaTache().getHeightCel(), tab.getMaTache().getWidthCel(), tab.getMaTache().getPosCelX(), tab.getMaTache().getPosCelY(), tab.getMaTache().getCouleurFond(), tab.getMaTache().getCouleurTexte(), tab.getMaTache().getCouleurBordure(), tab.getMaTache().getFreq()));
                        	
                			
                    		
                    		// fermeture du flux de sortie
        					oos.close();
        					
        					
                        } catch(FileNotFoundException e) {
                    		e.printStackTrace();
                    	} catch (IOException e) {
                    		e.printStackTrace();
                    	}
    


    Désolé, ce n'est pas très digeste !!

    Mon problème vient du fait que si il y a déjà une entrée dans le fichier (donc si file.length() > 0), une exception eof est immédiatement levée ! On ne rentre donc pas dans le bloc try de la boucle while !

    Je pense que je m'y prend mal, et c'est pour cela que je viens vous demander vos conseils !!

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      27 janvier 2009 à 18:00:04

      Tu t'y prend mal, la désérialisation restaure completement ton objet donc
      tabTache[i].setTache(((Tache)ois.readObject()).getTache());
      	                        		tabTache[i].setHeightCel(((Tache)ois.readObject()).getHeightCel());
      	                        		tabTache[i].setWidthCel(((Tache)ois.readObject()).getWidthCel());
      	                        		tabTache[i].setPosCelX(((Tache)ois.readObject()).getPosCelX());
      	                        		tabTache[i].setPosCelY(((Tache)ois.readObject()).getPosCelY());
      	                        		tabTache[i].setCouleurFond(((Tache)ois.readObject()).getCouleurFond());
      	                        		tabTache[i].setCouleurTexte(((Tache)ois.readObject()).getCouleurTexte());
      	                        		tabTache[i].setCouleurBordure(((Tache)ois.readObject()).getCouleurBordure());
      	                        		tabTache[i].setFreq(((Tache)ois.readObject()).getFreq());
      


      est inutile, il suffit de faire
      tabTache[i]=(Tache)ois.readObject();
      

      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2009 à 18:03:44

        t'as géré shakhal !! Merci beaucoup !!
        • Partager sur Facebook
        • Partager sur Twitter

        Problème avec la sérialisation

        × 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