IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Sauvegarde d'un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut Sauvegarde d'un tableau
    Bonsoir,

    A l'aide de mon programme j'insère dans un tableau à deux dimensions des chaines de caractères saisies par l'utilisateur.
    Je dispose d'une bouton Sauvegarde qui me permet de placer le contenus des zone de saisie dans les différentes cases du tableau. Jusque là tout va bien.

    Par contre j'aimerais créer un fichier de sauvegarde qui me permettrait lorsque j'appuie sur le bouton Sauvegarde de mettre tout le tableau dans le dit fichier.
    Lors du lancement du programme le fichier serait lu et le tableau redonné au programme pour avoir une persistance des données saisies par l'utilisateur.
    Si le fichier existe déjà alors il n'est pas créer, sinon ont le créer une fois.

    Je pensais à quelque chose de cette forme mais j'ai un soucis dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ObjectInputStream chLecture;
    ObjectOutputStream chEcriture;
     
    try
        	{
        		chLecture = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("année2009.txt"))));
        		chLecture.readObject(backup);
        		chLecture.close();
        	}
        	catch(ClassNotFoundException e)
        	{
        	}
    ...
    if (parEvt.getSource()==chBoutonSauvegarde)
    		{
    try
    			{
    				chEcriture = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("année2009.txt"))));
    				chEcriture.writeObject(backup);
    				chEcriture.close();
    			}
    			catch(FileNotFoundException e)
    			{
    			}
    			catch(IOException e)
    			{
    			}
    Or j'ai l'erreur readObject() in java.io.ObjectInputStream cannot be applied to (Sauvegarde)

    La classe Sauvegarde étant bien serialisé, elle ne contient qu'un seul champ, il s'agit du tableau a deux dimensions.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    étonnament, il n'existe pas de méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ObjectInputStream.readObject(Sauvegarde)
    par contre, il existe un méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object ObjectInputStream.readObject()
    qui te retourne l'objet lu, donc celui que tu avais sauvegardé la fois précédente. Bref, c'est ça qu'il faut utiliser

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Ah merci pour la méthode, par contre j'ai un autre petit problème

    Lorsque je lance mon programme j'ai placé la méthode chLecture.readObject() or il ne me charge rien du tout.

    De plus lors de chaque sauvegarde il me crée il nouveau fichier "année2009.txt"
    je me doute que c'est à cause du New File("année2009.txt") mais je ne vois pas comment indiquer à chEcriture que je parle de ce fichier en particulier.

    Une autre question mais bien moins grave, un fichier .txt est il correct dans ce cas là ? J'ai par curiosité ouvert le dit fichier et j'ai trouvé plein de caractère et au milieu de tout ça les dernières informations ajouté au tableau. ( qui disparaitrons lors de la prochaine sauvegarde )

    Merci bien.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par MmD_host Voir le message
    Lorsque je lance mon programme j'ai placé la méthode chLecture.readObject() or il ne me charge rien du tout.
    Mais encore? Que se passe-t-il: Exception? Renvoie un null? Renvoie autre chose?

    Citation Envoyé par MmD_host Voir le message
    De plus lors de chaque sauvegarde il me crée il nouveau fichier "année2009.txt"
    Ben oui il écrase le fichier précédent, y a aps de raison de garder ce qui s'y trouve de toutes facons. En plus, on ne peut pas travailler en append avec des ObjectOutputStream().
    Pour info, l'écrasement viens du "new FileOutputStream()"
    [QUOTE=MmD_host;4321988]

    Citation Envoyé par MmD_host Voir le message
    Une autre question mais bien moins grave, un fichier .txt est il correct dans ce cas là ? J'ai par curiosité ouvert le dit fichier et j'ai trouvé plein de caractère et au milieu de tout ça les dernières informations ajouté au tableau.
    Le format de ObjectOutputStream est binaire. Maintenant, le fichier, tu lui donne l'extension que tu veux.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Mais encore? Que se passe-t-il: Exception? Renvoie un null? Renvoie autre chose?
    Non il ne renvois rien, aucune exception, ce qu'il aurait fallu c'est que si j'avais saisie des informations sur la semaine en cours, celle ci ce serait afficher lors de la lecture du fichier.

    Citation Envoyé par tchize_ Voir le message
    Ben oui il écrase le fichier précédent, y a pas de raison de garder ce qui s'y trouve de toutes facons.
    Bah la raison serait d'avoir un traitement des données persistant, ainsi on peut ouvrir et fermer l'application et garder les informations rentrées.

    Merci bien.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    en java on ne renvoie jamais "rien" si la méthode n'est pas void. Les possibilité sont "une exception est lancée", "null est renvoyé" ou "un résultat est renvoyé qui ne correspond pas à tes attentes". Dans ce dernier cas, décrire ce résultat. N'hésite pas a poster ton code, puisque tu l'a modifié.

    Pour la persistance, avec objetoutputstream, tu envoie tout les objets que tu veux préserver dedans. Lorsque tu lira tu recevra ces même objets, dans le même ordre. C'est donc à toi, lorsque tu écrit, d'envoyer tout ce que tu veux dans le fichier (donc ce que tu as restauré + ce que tu as ajouté)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Alors en ce qui concerne mon code, pour les explications :

    J'ai une classe Sauvegarde qui contient le tableau à deux dimensions. ( un tableau de String de 52x7 qui contient les données entrées par l'utilisateur )

    Ainsi lorsque l'utilisateur saisie une date à afficher, chaque JTextArea va piocher dans les cases du tableau correspondante pour afficher les informations rentrer ultérieurement.
    Actuellement ceci ne marche que lors d'une même utilisation de l'application ( pas de persistance ).

    Le code actuellement ressemble à ça pour la lecture du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /* Lecture du fichier de sauvegarde si il n'existe pas, il est crée */
        	try
        	{
        		chLecture = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("année2009.dat"))));
        		chLecture.readObject();
        		chLecture.close();
        	}
        	catch(ClassNotFoundException e)
        	{
        	}
        	catch(FileNotFoundException e)
    		{
    		}
    		catch(IOException e)
    		{
    		}
    Ce morceaux de code étant placé dans le constructeur de la fenêtre principal.

    Pour l'écriture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    if (parEvt.getSource()==chBoutonSauvegarde)
    		{
    	/* Place dans les cases du tableau les chaines de caractères rentrées par l'utilisateur */
    			backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][0] = chZoneDeSaisie1.getText(); 
    			backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][1] = chZoneDeSaisie2.getText();
    			backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][2] = chZoneDeSaisie3.getText(); 
    			backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][3] = chZoneDeSaisie4.getText(); 
    			backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][4] = chZoneDeSaisie5.getText(); 
    			backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][5] = chZoneDeSaisie6.getText(); 
    			backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][6] = chZoneDeSaisie7.getText(); 
     
    			try
    			{
    				chEcriture = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("année2009.dat"))));
    				chEcriture.writeObject(backup);
    				chEcriture.close();
    			}
    			catch(FileNotFoundException e)
    			{
    			}
    			catch(IOException e)
    			{
    			}
     
    		}// Bouton Sauvegarde
    Le code de l'évènement associé à la saisie d'une date est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(chDateCourante.estUneDateCorrecte(chJour,chMois,chAnnée)==true)	
    				{chZoneDeSaisie1.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][0]); 
    					chZoneDeSaisie2.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][1]); 
    					chZoneDeSaisie3.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][2]); 
    					chZoneDeSaisie4.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][3]); 
    					chZoneDeSaisie5.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][4]); 
    					chZoneDeSaisie6.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][5]); 
    					chZoneDeSaisie7.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][6]); 
     
     
    				}
    Je pense que la méthode pour la lecture est mauvaise, il faudrait peut être quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
          FileInputStream fichier = new FileInputStream("annee2009.txt");
          ObjectInputStream  chLecture = new ObjectInputStream(fichier);
          save = (Sauvegarde)chLecture.readObject();
          /* Insertion des données du tableau dans les zone de saisie */
          chZoneDeSaisie2.setText(save.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][1]); 
          chLecture.close();
        }
    Merci d'avance

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par MmD_host Voir le message
    Je pense que la méthode pour la lecture est mauvaise, il faudrait peut être quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
          FileInputStream fichier = new FileInputStream("annee2009.txt");
          ObjectInputStream  chLecture = new ObjectInputStream(fichier);
          save = (Sauvegarde)chLecture.readObject();
          /* Insertion des données du tableau dans les zone de saisie */
          chZoneDeSaisie2.setText(save.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][1]); 
          chLecture.close();
        }
    Merci d'avance
    Exactement, c'est ca ton problème, tu lit, mais tu ne fait rien de ce qui a été lu. Tu doit stocker le retour de readObject quelques part, car c'est ce retour, ton backup écrit précédement.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Exactement, c'est ca ton problème, tu lit, mais tu ne fait rien de ce qui a été lu. Tu doit stocker le retour de readObject quelques part, car c'est ce retour, ton backup écrit précédement.
    Je commence à comprendre mon erreur initial, j'ai mal jugé le fonctionnement de la serialisation, je pensais qu'après avoir fait un readObject(), la classe sauvegarde était restitué à son état tel qu'elle était dans le fichier, ainsi l'accès ce faisait de la même façon.

    Mais si j'ai bien compris, il faut donc affecter la lecture à une variable qui elle va faire office d'objet de la classe qui contient le tableau.

    La solution que j'ai proposé est-elle la bonne ? avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save = (Sauvegarde)chLecture.readObject();
    Je précise aussi que le backup écris précédemment est un Objet de la classe Sauvegarde qui permet donc l'accès au tableau.

    Merci.

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ce qui est écrit dans le fichier est complètement désolidarisée de la mémoire. Donc, entre autres, le noms des variables ne sont pas stocké ni leur emplacement mémoire. D'ailleurs, y a aucun moyen en java de savoir d'ou viens une variable qu'on passe à une méthode. Donc en gros tu fait objectOutputStream.writeObject(x) pour écrire x. Ensuite pour remplacer x en mémoire par ce qui a été sauvé, c'est x=(X)objectInputStream.readObject(); Bref, ca fonctionne comme n"importe quelle autre méthode java, tu veux utiliser la valeur de retour, faut déjà commencer par la stocker dans une variable

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Alors en faite j'ai fais les modifications suivante mais j'ai toujours le même problème, cad que lors du chargement des données il ne m'affiche rien même si le fichier année2009.txt contient des données précédemment rentré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
        	/* Lecture du fichier de sauvegarde si il n'existe pas, il est crée */
     
        	try
        	{
     
        	FileInputStream chFichier = new FileInputStream("annee2009.txt");
     
        	ObjectInputStream  chLecture = new ObjectInputStream(chFichier);
        	backup = (Sauvegarde)chLecture.readObject();
     
        	chZoneDeSaisie1.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][0]); 
    		chZoneDeSaisie2.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][1]); 
    		chZoneDeSaisie3.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][2]); 
    		chZoneDeSaisie4.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][3]); 
    		chZoneDeSaisie5.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][4]); 
    		chZoneDeSaisie6.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][5]); 
    		chZoneDeSaisie7.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][6]);
    		chLecture.close();
        	}
        	catch(ClassNotFoundException e)
        	{
        	}
        	catch(FileNotFoundException e)
    		{
    		}
    		catch(IOException e)
    		{
    		}
    Je pense qu'une exception est levé puisque j'ai placé ce morceaux de code excepté les 3 premières lignes dans l'actionPerformed du bouton pour saisir une date, et lors de la saisie la semaine est bien affiché mais l'exception que j'avais placé pour une date incorrecte se déclenche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    backup = (Sauvegarde)chLecture.readObject();
     
    					chZoneDeSaisie1.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][0]); 
    					chZoneDeSaisie2.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][1]); 
    					chZoneDeSaisie3.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][2]); 
    					chZoneDeSaisie4.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][3]); 
    					chZoneDeSaisie5.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][4]); 
    					chZoneDeSaisie6.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][5]); 
    					chZoneDeSaisie7.setText(backup.chTableauSauvegarde[chDateCourante.chJourCourant.get(GregorianCalendar.WEEK_OF_YEAR)][6]); 
     
    					chLecture.close();
     
     
    				}
    			}
    			catch(Exception e)
    			{
    				JOptionPane.showMessageDialog(null,"Attention il faut saisir une date au format jj-mm-aaaa ( ou jj/mm/aaaa )");
    			}
    Donc lorsque je saisie une date elle est correctement généré par le programme mais il m'affiche quand même la petite fenêtre "Attention..." je pense que ça doit être en rapport avec le flux.

    Pour ne pas recrée le fichier à chaque fois en lecture, j'utilise la méthode exists() mais à la compilation il me dit qu'elle n'existe pas , j'ai pourtant bien fait chaque import.

    Merci.

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    comment déjà par balancer ça immédiatement par la fenetre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        	catch(ClassNotFoundException e)
        	{
        	}
        	catch(FileNotFoundException e)
    		{
    		}
    		catch(IOException e)
    		{
    		}

    Le seul effet de ce code c'est de te cacher les informations dont tu as cruellement besoin pour savoir pourquoi ton code marche pas. Remplace le, au minimum par l'équivalent de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        	catch(ClassNotFoundException e)
        	{
        	    e.printStackTrace();
        	}
        	catch(FileNotFoundException e)
    		{
        	    e.printStackTrace();
    		}
    		catch(IOException e)
    		{
        	    e.printStackTrace();
    		}
    Ensuite donne nous le stacktrace de tes exception qu'on puisse avancer. A vue de nez ton code est bon, si ce n'est que tu charge un tableau depuis backup, mais tu récupère des index dedans qui dépendent de ton instance courante. Je sais pas la tete qu'a ton tableau, mais ce serait peut etre risquer les IndexOutOfBound.

    Dans tous les cas, envoie nous l'exception si t'as besoin d'aide pour le déblocage. On sais rien faire sans ca.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Mon tableau c'est un tableau en deux dimensions de 52x7 qui contient des chaines de caractères ( qui elle même correspondent aux données rentrée par l'utilisateur ).

    Voici l'exception en question :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    java.io.FileNotFoundException: annee2009.txt (Le fichier spécifié est introuvable)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at FenetreCalendrier.<init>(FenetreCalendrier.java:71)
        at Mini_Agenda.main(Mini_Agenda.java:23)
    Merci de vous être déjà autant pencher sur mon problème !

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le message d'erreur est assez explicite, il me semble

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 29
    Par défaut
    Oui bien sur mais n'est il pas censé le créer ce fichier annee2009.txt avec la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream chFichier = new FileInputStream("annee2009.txt");
    Et puis après la première exécution le fichier annee2009.txt est bien présent dans le dossier du programme

    EDIT : En faite j'ai rien dit, lorsque le fichier est présent dans le dossier le chargement des données ce fait correctement, c'est déjà ça de fait.

    J'ai juste l'impression qu'il ne me charge pas un tableau en deux dimensions ~~

    EDIT² :Bon j'ai vraiment rien dit, j'avais juste un problème de lecture de flux, j'ai bien une réel persistance de mon tableau de données sur toutes les semaines de l'année.

    Encore un grand merci de vous être penché sur le problème !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2008, 10h34
  2. Réponses: 4
    Dernier message: 29/04/2008, 09h52
  3. Sauvegarde d'un tableau dans mysql
    Par cedre22 dans le forum Administration
    Réponses: 1
    Dernier message: 11/01/2006, 21h02
  4. [BD Access] Sauvegarde d'un tableau
    Par Tips dans le forum C++
    Réponses: 3
    Dernier message: 07/01/2006, 19h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo