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

Entrée/Sortie Java Discussion :

Problème lors de la fermeture d'un fichier texte.


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Par défaut Problème lors de la fermeture d'un fichier texte.
    Bonjour à tous.

    Je dois programmer un jeu (dans le cadre de mon BAC) et j'ai décidé de faire une revisite de Flappy Bird.

    Toute la partie graphique est faite, je bloque actuellement sur la sauvegarde des scores.

    Voilà comment fonctionne mon idée :
    J'ai un fichier texte dans lequel j'enregistre les scores.
    Une fois le jeu terminé, le programme va aller ouvrir ce fichier, lire les valeurs qui sont dedans, et les placer dans un tableau.
    Je ne garde que les trois meilleurs scores.
    Le programme va comparer le score effectué par le joueur aux autres scores enregistrés.
    Si le score effectué est supérieur à ceux enregistrés, alors le score effectué prendra la première place dans le tableau, supprimant ainsi la dernière.

    Dans l'idéal, j'aurais voulu juste modifier mon fichier texte, mais ça a l'air trop compliqué. J'ai donc décidé de supprimer le fichier texte qui contient les scores, et d'en créer un autre dans lequel je sauvegarderai les valeurs de mon tableau, donc les nouveaux meilleurs scores. Sauf que, ça ne marche pas. J'ai trouvé une technique me permettant de supprimer le fichier, j'en ai fait une fonction que j'appelle si le score devient le nouveau meilleur score, mais cette fonctionne refuse de supprimer le dossier. Lorsque je mets en commentaire la fonction me permettant de lire les valeurs du fichier, la suppression fonctionne.

    J'ai vérifié que le fichier soit bien fermé, et c'est le cas, j'ai essayé plusieurs manips mais en vain.

    Voilà mon code :
    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
    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
    public class scores extends GraphicsProgram {
     
        private int tab[] = {0,0,0};
        File fichier = new File("scores.txt");
     
        public void init(){
            lire();
        }
        public void lire(){
     
            try {
                BufferedReader fichier = new BufferedReader(new FileReader("scores.txt"));
                String ligne;
                for(int i = 0; i < 4; i++) {
                    ligne = fichier.readLine();
                    tab[i] = Integer.parseInt(ligne);
                    println("tab i ="+tab[i]);
                }
                fichier.close();            
            }
            catch(Exception e) {}
     
            int m = 1000;
            if( m > tab[2]){
                int f = tab[2];
                tab[2] = m;
                if(m > tab[1]){
                    int g = tab[1];
                    tab[1] = m;
                    tab[2] = f;
                    if ( m > tab[0]){
                        int h = tab[0];
                        tab[0] = m;
                        tab[1] = h;
                        tab[2] = g;
                        println("tab 0 =" +tab[0]);
                        println("tab 1 =" +tab[1]);
                        println("tab 2 =" +tab[2]);
                        suppression();
     
                    }
                }
            }
        }
     
        public void suppression(){ 
     
           File f= null;
           boolean bool = false;
     
           try{
     
               bool = f.delete();
     
               System.out.println("Fichier supprimé: "+bool);
     
               f.createNewFile();
     
               System.out.println("createNewFile() méthode appelée");
     
               f.delete();
     
               System.out.println("Fichier supprimé: "+bool);
     
            } catch(Exception e) {
                e.printStackTrace();
            }
     
            remplacer();
        }
     
        public void remplacer(){
     
            try {
                PrintWriter scores = new PrintWriter(new FileWriter("scores.txt", false));
                for ( int i = 0; i < tab.length; i++ ){
                    scores.println(""+tab[i]);
                }
                scores.close();
     
            } catch(Exception e) {}
        }
    }
    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void suppression(){ 
     
           File f= null;
           boolean bool = false;
     
           try{
     
               bool = f.delete();
    Donc, forcément, ça ne peut pas fonctionner (tu obtiens une NullPointerException).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File fichier = new File("scores.txt");
    fichier.delete();
    est suffisant pour supprimer le fichier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    f.createNewFile();
     
               System.out.println("createNewFile() méthode appelée");
     
               f.delete();
    Le createNewFile ne sert strictement rien (l'ouverture d'un Writer va créer le fichier de toute manière), d'autant plus que tu le supprimes juste après.

    En revanche, attention : ton tableau ne contient que 3 valeurs. Or tu fais une boucle de 4 itérations pour le lire !!!
    Par ailleurs, n'oublie pas que ton fichier ne peut ne pas exister, en particulier la première fois avant de n'avoir jamais écrit de scores dedans : teste son existance par File.exists().
    Enfin, ne jamais faire de bloc catch() vide : au moins afficher l'exception, sinon, en cas d'exception, non seulement tu ne comprendras pas pourquoi ton programme semble ne rien faire, mais en plus tu ne sauras pas pourquoi. C'est d'ailleurs la raison qui fait que tu ne vois pas que tu obtiens une NullPointerException sur ton f.delete().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Bonjour,

    Attention aux règles de nommage des classes en java !
    à voir ici
    III-B. Classes▲

    Première lettre en majuscule
    Mélange de minuscule, majuscule avec la première lettre de chaque mot en majuscule
    Donner des noms simples et descriptifs
    Eviter les acronymes hormis les communs (Xml, Url, Html)
    N'utiliser que des lettres [a-z][A-Z] et [0-9]
    Donc ta classe devrait plutôt être écrite comme ceci : Scores (avec un 's' majuscule)


  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
    Et attention à ta gestion d'exception: on ne fais presque jamais un catch(Exception) car ça capte tout et n'importe quoi, et encore moire pour y mettre un bloc vide.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 10
    Par défaut
    Je vous remercie pour vous réponses.
    J'ai modifié le nom de ma classe, j'ai tout basculé sur une nouvelle classe " Scores2 ", j'ai retiré la ligne file fichier = null ainsi que la fonction create new file.
    J'ai également modifié la boucle qui gère le tableau et mit 3 à la place du 4.
    Du coup, ceci fonctionne.
    Pour ce qui est du catch(exception), j'ai essayé de le retirer et une erreur apparaissait, " insert Finally ", j'ai essayé plusieurs choses mais rien n'y fait, je laisse donc comme ça.
    Merci beaucoup, j'ai bataillé un bon paquet d'heures sans me rendre compte des choses inutiles qui bloquaient.
    Encore un grand merci à vous, bonne soirée !

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

Discussions similaires

  1. Problème lors de l'écriture dans un fichier texte
    Par Iron-Avenger dans le forum Débuter
    Réponses: 8
    Dernier message: 28/04/2013, 11h13
  2. Réponses: 4
    Dernier message: 04/04/2007, 07h46
  3. [VB6]Problème lors de la création d'un fichier texte
    Par Kronoob dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/06/2006, 20h27
  4. Problèmes lors de la lecture d'un fichier
    Par samothtronicien dans le forum C++
    Réponses: 5
    Dernier message: 27/05/2006, 00h05
  5. Problème lors de la lecture d'un fichier avec Input...
    Par Kronoob dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 18/11/2005, 18h55

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