1. #1
    Membre à l'essai
    Inscrit en
    janvier 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 12
    Points : 10
    Points
    10

    Par défaut problème de clôture des fichiers

    Bonjour,

    Nous utilisons sonarqube pour la revue de code, et j'ai plusieurs lignes qui sont analysées par sonar comme des bugs de type :
    Close this "FileWriter" ou Close this "FileReader".
    Le problème est que je "close" bien ces FileReader et Writer, et que je ne comprends pas pourquoi il me sort ça en bug.
    Quelqu'un a-t-il une idée ?
    (ci-dessous, code concerné)
    Merci d'avance de votre aide.

    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
     
    public static void ecrireFichier(String cheminFichier, List<String> lignes) throws IOException
        {
            File fichier = new File(cheminFichier);
            FileWriter fiwri = new FileWriter(fichier);
            for (String ligne : lignes)
            {
                fiwri.write(ligne);
                fiwri.write("\n");
            }
            fiwri.close();
        }
     
        public List<String> lireFichier(String cheminFichier) throws IOException
        {
            File fichier = new File(cheminFichier);
            String ligne;
            List<String> lignesLues = new ArrayList<String>();
            BufferedReader reader = new BufferedReader(new FileReader(fichier));
            while ((ligne = reader.readLine()) != null)
            {
                lignesLues.add(ligne);
            }
            reader.close();
            return lignesLues;
        }

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    août 2006
    Messages
    3 233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2006
    Messages : 3 233
    Points : 4 056
    Points
    4 056

    Par défaut

    Et si tu mets ton close dans un bloc finally ?
    Il vaudrait mieux le faire pour garantir que même en cas d'exception, tu fermes tes flux.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 : 11 284
    Points : 26 801
    Points
    26 801
    Billets dans le blog
    2

    Par défaut

    Salut,

    C'est probablement parce que le fichier n'est pas fermé en cas d'exception (la ligne avec le close ne sera pas exécutée dans ce cas).

    Utilise un try-with-resource :

    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
     
    public static void ecrireFichier(String cheminFichier, List<String> lignes) throws IOException {
            File fichier = new File(cheminFichier);
            try(FileWriter fiwri = new FileWriter(fichier)) {
               for (String ligne : lignes) {
                fiwri.write(ligne);
                fiwri.write("\n");
               }
            }
    }
     
    public List<String> lireFichier(String cheminFichier) throws IOException {
            File fichier = new File(cheminFichier);
            List<String> lignesLues = new ArrayList<String>();
            try(BufferedReader reader = new BufferedReader(new FileReader(fichier))) {
               String ligne;
               while ((ligne = reader.readLine()) != null) {
                  lignesLues.add(ligne);
               }
            }
            return lignesLues;
    }
    Pour la seconde méthode tu peux même faire, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return Files.readAllLines(Paths.get(cheminFichier));
    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.

  4. #4
    Membre à l'essai
    Inscrit en
    janvier 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : janvier 2010
    Messages : 12
    Points : 10
    Points
    10

    Par défaut

    Merci .
    Ca marche impec.

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

Discussions similaires

  1. [POI] Problème de lecture des fichiers Word
    Par Dari dans le forum Documents
    Réponses: 9
    Dernier message: 05/07/2007, 14h08
  2. problème de joindre des fichiers dans internet explorer
    Par passion_info dans le forum Windows XP
    Réponses: 2
    Dernier message: 07/10/2006, 13h59
  3. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  4. [HTML] Problème mise à jour des fichiers en cache
    Par El Riiico dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/09/2005, 17h00
  5. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30

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