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

Langage Java Discussion :

[Débutant]Comment gérer les erreurs simplement ?


Sujet :

Langage Java

  1. #1
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut [Débutant]Comment gérer les erreurs simplement ?
    Bonsoir !

    Je développe un programme qui a pour but d'analyser un fichier donné par l'utilisateur.

    Je demande à l'utilisateur de saisir le chemin de son fichier, et je crée ainsi une instance de la classe Fichier.

    Dans les méthodes de cette classe Fichier, je dois lire le contenu de ce fichier grâce à la méthode FileReader. Or, à chaque fois que j'appelle cette méthode, je dois gérer les exceptions (fichier inexistant ou corrompu).

    Comment faire pour ne pas avoir à gérer l'exception à chaque appel du fichier, mais une fois pour toutes ?

    Voilà la structure de mon programme :

    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
    import java.io.* ;
    import java.util.*;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    
    public class Fichier{
    	
    	String nom_ ; // Le nom du fichier
    	File file_ ;
    	
    	/** Constructeur*/
    	public Fichier(String nom){
    		nom_ = nom;
    		file_ = new File(nom);
    		}
    	
    	
    		
    	/** Exécute le programme de nettoyage, qui supprime
    	*  tous les espaces et tabulations en début de ligne*/
    	private void nettoie(){
    		try {
    			String texte = ""; // Le texte modifié est stocké temporairement ici
    			FileReader codeLu = new FileReader(nom_); // Ouvre le fichier en lecture
    			int lu = codeLu.read() ; // renvoie le premier caractère (codé en int) du fichier
    			while (lu != -1) {blablabla
    				}
    			FileWriter codeEcrit = new FileWriter(nom_); // Ouvre le fichier en écriture
    			codeEcrit.write(texte); // Ecrit le texte nettoyé dans le fichier
    			codeEcrit.close(); // ferme le fichier en écriture
    			Console.ecrireNL("Le fichier " + nom_ + " a été nettoyé !");
    			
    			}
    		catch (FileNotFoundException e) { // Erreur à renvoyer si l'adresse du fichier est incorrecte
    			Console.ecrireNL("Le fichier "
    			+ nom_ +" n'existe pas !");
    			} 
    		catch (IOException e) { // Autres erreurs
    			Console.ecrireNL("Erreur de lecture !");
    			}
    		}
    	
    	/** Exécute le programme d'indentation, qui ajoute le nombre
    	*  de tabulations nécessaires en début de ligne*/
    	private void indente(){
    		try {
    			String texte = ""; // Le texte modifié est stocké temporairement ici
    			FileReader codeLu = new FileReader(nom_); // Ouvre le fichier en lecture
    			int lu = codeLu.read() ; // renvoie le premier caractère (codé en int) du fichier
    			int nbTab = 0 ; // le nombre de tabulations à mettre en début de ligne est initialisé à 0
    			String tabulation = ""; // permet de stocker ce nombre sous forme de String (alinéa)
    			while (lu != -1) {balablabla
                            }
    			FileWriter codeEcrit = new FileWriter(nom_); // Ouvre le fichier en écriture
    			codeEcrit.write(texte); // Ecrit le texte indenté dans le fichier
    			codeEcrit.close(); // ferme le fichier en écriture
    			Console.ecrireNL(flag1 + "Le fichier " + nom_ + " a été indenté !");
    			
    			}
    		catch (FileNotFoundException e) { // Erreur à renvoyer si l'adresse du fichier est incorrecte
    			Console.ecrireNL("Le fichier "
    			+ nom_ +" n'existe pas !");
    			} 
    		catch (IOException e) { // Autres erreurs
    			Console.ecrireNL("Erreur de lecture !");
    			}
    		}
    	
    	/** Interface avec l'utilisateur*/	
    	public static void main(String[] args) {
    		Console.ecrireNL("Entrez le nom du fichier à indenter (avec son chemin et son extension) :");
    		String nom = Console.lireMot(); // lit le nom du fichier saisi par l'utilisateur
    		Fichier monFichier = new Fichier(nom); // crée un Fichier avec ce nom
    		monFichier.nettoie(); // lance le programme de nettoyage
    		monFichier.indente(); // lance le programme d'indentation
    		}
    	
    	}
    MAJ : J'ai testé également de mettre le try & catch dans le main ; mais à la compilation, ça renvoit des erreurs :
    "Unreachable catch block for FileNotFoundException. This exception is never thrown from the try statement body" et idem pour IOException...
    MATLAB R2008a - Windows XP 32 bit et Windows Vista 64 bit

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Il te suffit de tester dans ton main l'existence 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
    	public static void main(String[] args) {
    		Console.ecrireNL("Entrez le nom du fichier à indenter (avec son chemin et son extension) :");
    		String nom = Console.lireMot(); // lit le nom du fichier saisi par l'utilisateur
                    File fp = new File(nom);
                    if (fp.exists())
                    {
    		   Fichier monFichier = new Fichier(nom); // crée un Fichier avec ce nom
    		   monFichier.nettoie(); // lance le programme de nettoyage
    		   monFichier.indente(); // lance le programme d'indentation
    		}
                    else
                    {
                        System.out.println("Veuillez entrer un nom de fichier qui existe");
                    }
                  }
    Meekhal

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Si tu veux que l'exception soit envoyée au niveau superieur il ne faut pas faire de try/catch dans ta methode mais declarer que cette methode envoie une exception et tu catches l'exception au niveau superieur, dans ton main par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void nettoie(...) throws Exception
    Meekhal

  4. #4
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Points : 213
    Points
    213
    Par défaut
    malheuresement, ça ne fonctionne pas... (je parle de la 1ère réponse)

    si j'enlève les blocs try&catch des méthodes, il me sort des erreurs Unhandled FileNotFoundException et IOException.

    A mon avis, cela vient du fait qu'il ne sait pas que je n'instancie mes classes qu'à partir de ce main et pas d'ailleurs... (auquel cas la gestion des exceptions dans les méthodes serait importante).

    Logiquement, il faudrait que je gère les exceptions dans le constructeur...
    mais comment faire pour qu'il ne "construise" pas l'instance en cas d'erreur ?

    Edit : merci, je vais tester le throws (je ne le connaissais pas...)

    Edit2 : Ca marche !!!
    J'ai utilisé les "throws" pour faire remonter les exceptions jusqu'à mon main. Et ça roule !
    Merci beaucoup Meekhal !
    MATLAB R2008a - Windows XP 32 bit et Windows Vista 64 bit

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/05/2013, 01h29
  2. [Fortran 90] Comment gérer les erreurs Run Time ?
    Par Truth dans le forum Fortran
    Réponses: 5
    Dernier message: 13/11/2008, 16h46
  3. Comment gérer les erreurs de la compilation sous linux ?
    Par petitclem dans le forum Autres éditeurs
    Réponses: 15
    Dernier message: 01/08/2008, 15h53
  4. [bash][ftp] comment gérer les erreurs
    Par Merfolk dans le forum Linux
    Réponses: 2
    Dernier message: 31/07/2008, 09h17

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