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 :

opération sur un fichier


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut opération sur un fichier
    Bonjour,
    Je suis plus ou moins débutant en JAVA et j'aimerais avoir l'avis d'expert dans ce langage sur le bout de code suivant que j'ai réalisé (lecture, écriture, suppression de fichier).
    Je pense qu'il y a bcp de chose à améliorer/optimiser

    Merci !

    CLASSE 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
    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
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
     
    public class Fichier {
    	public void lire_Fichier (String p_fich) throws IOException {
    		BufferedReader w_lecture = null; 
    		String ligne; 
     
    		try {
    			w_lecture = new BufferedReader (new FileReader(p_fich));
    		}
    		catch (FileNotFoundException exc) {
     
    			System.out.println("Fichier inexistant !!!");
    		}
     
    		while ((ligne = w_lecture.readLine()) != null)
    			System.out.println(ligne);
     
    		w_lecture.close();		
    	}
     
    	public void ecrire_Fichier (String p_fich, String p_commentaire, boolean ajout) throws IOException {
     
    		try {
    			FileReader w_r = new FileReader(p_fich); 
    			FileWriter w_c = new FileWriter(p_fich, ajout);
    			w_c.write(p_commentaire);
    			w_c.flush();
    			w_c.close();
    		}
    		catch (FileNotFoundException exc) {
    			System.out.println("fichier inexistant !!!");
    		}
    	}
     
    	public boolean supprimer_Fichier (String p_fich) throws IOException {
    		boolean resultat = true;
     
    		try {
    			FileReader w_r = new FileReader(p_fich);
    			resultat = true;
    		}
    		catch (FileNotFoundException exc) {
    			System.out.println("fichier inexistant !!!");
    			resultat = false;
    		}
    		finally {
    			return resultat;
    		}
    	}
    CLASSE PRINCIPALE :

    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
     
    import java.io.IOException;
     
    public class principale {
            public static void main(String[] args) throws IOException {		
    	        Fichier p_fichier = new Fichier();
    		String w_c = "Bonjour ! Ceci est un test d'ecriture dans un fichier\n";
    		p_fichier.ecrire_Fichier("texte", w_c, true);
    		p_fichier.lire_Fichier("texte");
    		if (p_fichier.supprimer_Fichier("texte") == true) {
    			System.out.println("Fichier supprimé !");
    		}
    		else {
    			System.out.println("Impossible de supprimer le fichier !");
    		}
    	}
    }

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Juste une ou deux remarques pour ma part :

    • Il faut que tu fermes tes flux (reader et writer) dans des blocs finally pour être bien sûr de les fermer
    • quand tu attrapes une exception, affiche au moins le message (getMessage) et éventuellement (toujours si tu es en phase de dev) la trace de l'exception (printStackTrace)
    • enfin par convention le nom des classes prend une majuscule


    sinon fonctionnellement j'ai pas vraiment regardé ...

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    • Toujours utiliser un try/finally pour les fermetures de fichier (lire Comment libérer proprement les ressources ? ).
    • Gérer les exceptions de manières plus globales, et bien arrêter tout le traitement en cours.
      Dans ce code :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      		try {
      			w_lecture = new BufferedReader (new FileReader(p_fich));
      		}
      		catch (FileNotFoundException exc) {
       
      			System.out.println("Fichier inexistant !!!");
      		}
       
      		while ((ligne = w_lecture.readLine()) != null)
      			System.out.println(ligne);
      Il y a une erreur typique d'une mauvaise gestion des exceptions :
      [indent] Si le fichier n'existe pas, on affiche un message mais on continue quand même à essayer de le lire (ce qui produira un NullPointer )
    • Dans la méthode ecrire_Fichier() tu ouvres aussi le fichier en lecture et tu ne le fermes même pas (par contre tu fermes deux foix celui en écriture) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      FileReader w_r = new FileReader(p_fich); 
      FileWriter w_c = new FileWriter(p_fich, ajout);
      w_c.write(p_commentaire);
      w_c.flush();
      w_c.close();
      ceci devient :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      FileWriter writer = new FileWriter(p_fich, ajout);
      try {
      	writer.write(p_commentaire);
      } finally {
      	writer.close();
      }
    • Dans supprimer_Fichier() tu ouvres le fichier en lecture ! Je n'ai pas compris pourquoi
      De plus tu ne supprimes rien re-
    • Moins grave (mais quand même) : tu ne respectes pas les conventions de nommages (plein de _ partout) et tu as des noms de variables "bizarres" (w_c représente parfois une String ou un Writer selon le cas).




    a++

    [edit] En partie (bien) grillé par in

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    [edit] En partie (bien) grillé par in
    J'ai envie d'enlever mon message tellement le tien est

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    Merci bcp pour vos remarques

    Alors si j'ouvre le fichier en lecture dans la métode ecrire_Fichier() et supprime_Fichier() c'est parce que c'est le seul moyen que j'ai trouvé pour tester si le fichier existe. Je ne veux pas le créer ni le supprimer s'il n'existe pas. Or avec le write() il créer le fichier s'il n'existe pas.

    Dans supprime_Fichier() je ne sais pas trop comment supprimer le fichier en question Je crois que je n'utilise pas les bons types. Avec des "File" ce serait plus simple ?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sinon Voir le message
    Avec des "File" ce serait plus simple ?
    Oui ! FileReader et FileWriter sont fait uniquement pour lire/écrire dans un fichier.
    Pour tous ce qui concerne la gestion du fichier la classe File est plus appropriée...


    a++

  7. #7
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    La classe File possede ses propres méthodes de tests d'existence, etc . c'est pratique en effet.


    ta méthode ecrire fichier me trouble un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public void ecrire_Fichier (String p_fich, String p_commentaire, boolean ajout) throws IOException {
     
    		try {
    			FileReader w_r = new FileReader(p_fich); 
    			FileWriter w_c = new FileWriter(p_fich, ajout);
    			w_c.write(p_commentaire);
    			w_c.flush();
    			w_c.close();
    		}
    		catch (FileNotFoundException exc) {
    			System.out.println("fichier inexistant !!!");
    		}
    En effet je suis pas sur que toutes les méthodes appellées renvoient un FNFException ....( si le fichier existe mais pas les droits qu'il faut etc ... ?)
    tu devrais rajouter un catch plus "générique" derriere.

Discussions similaires

  1. Opérations sur plusieurs fichiers
    Par arnest dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/03/2008, 11h27
  2. Opération sur (gros) fichier
    Par sloshy dans le forum C
    Réponses: 8
    Dernier message: 24/10/2007, 19h24
  3. Opération sur un fichier de log
    Par bebert49 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 26/04/2007, 11h04
  4. Opération sur un fichier XML
    Par espadon1 dans le forum Modules
    Réponses: 1
    Dernier message: 10/06/2006, 10h25
  5. [débutant] Opération sur un fichier XML
    Par espadon1 dans le forum Modules
    Réponses: 5
    Dernier message: 31/05/2006, 11h38

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