TD 4 TP 4
TD 4 TP 4
TD 4 TP 4
TD/TP 5 : Exceptions
Exercice 1. Contrôle et capture des exceptions TD
1. Expliquer pourquoi f1() se compile sans problème, tandis qu'une erreur de compilation se produit
lors de l'analyse de f2() ?
CPO2 TD/TP 4
Page 1/5
}
public static void main(String[] args) throws Exc3 {
TestException t = new TestException();
t.f3();
}
}
public Pile() {
t = new int[TAILLE_MAX];
nb = 0;
}
CPO2 TD/TP 4
Page 2/5
System.out.println("sortie du dépilerTout");
}
(a) Indiquer ce qui s’affiche dans la fenêtre console quand on exécute la méthode main :
- lorsque TAILLE_MAX = 0
- lorsque TAILLE_MAX = 1
- lorsque TAILLE_MAX = 2
(b) La méthode depilerTout() utilise abusivement le mécanisme des exceptions puisqu'elle provoque délibérément une
exception qu'elle pourrait éviter. Remplacez-la par une méthode mieux conçue. Cette méthode doit, comme la méthode
depilerTout(), afficher la liste des éléments selon l'ordre de dépilement et dépiler toute la pile.
On veut écrire une application qui lit un fichier texte supposé exister, affiche son contenu, ainsi que le nombre total de
caractères autres que les espaces (ou toute autre propriété du contenu : nombre de lignes, etc...). Le chemin d'accès au
fichier à ouvrir est demandé à l'utilisateur.
1. Écrire l'application demandée sans chercher à capturer les exceptions susceptibles d'être générées. Pour créer un
fichier texte, vous pouvez utiliser n'importe quel éditeur de texte. Vous pouvez aussi écrire une autre application
qui crée un fichier texte. Voir les programmes suivants qui vous donnent des exemples de lecture et écriture de
fichiers textes.
Testez en particulier le cas où le nom (ou chemin) entré par l'utilisateur ne correspond pas à un fichier existant.
2. On veut maintenant gérer l'exception "FileNotFoundException" en capturant cette exception, en signalant l'erreur
à l'utilisateur, et en lui demandant d'entrer un nouveau nom de fichier, et ce, jusqu'à ce que l'ouverture aboutisse ou
que l'utilisateur abandonne la tentative d'ouverture.
CPO2 TD/TP 4
Page 3/5
/* Exemple de programme lisant un fichier texte nommé "essai.txt" */
import java.io.*;
public class FicText2 {
public static void main(String args []) throws IOException {
BufferedReader lectureFichier = new BufferedReader( new
FileReader ("essai.txt"));
System.out.println("Lecture du fichier essai.txt");
String s = lectureFichier.readLine();
/* readLine() retourne :
- la ligne lue jusqu'au retour chariot (lu mais non retourné)
donc une chaîne vide si la ligne ne comporte qu'un RC
- la valeur null s'il n'y a rien à lire (fin du flux de données)
*/
while (s!= null) {
System.out.println(s);
s = lectureFichier.readLine();
}
lectureFichier.close();
System.out.println("Fin du fichier");
}
}
import java.io.*;
public class FicTexte1 {
public static void main(String args []) throws IOException {
BufferedReader lectureClavier = new BufferedReader( new
InputStreamReader (System.in));
BufferedWriter ecritureFichier = new BufferedWriter( new
FileWriter ("essai.txt"));
Réaliser une classe EntNat permettant de gérer des entiers naturels (positifs ou nuls) et disposant :
- d’un constructeur avec un argument de type int ; il générera une exception de type ErrConst si la valeur de son
argument est négative ;
- un accesseur en lecture getN() qui fournira sous forme d’un int la valeur encapsulée dans un objet de type EntNat ;
- un accesseur en écriture setN() qui modifiera la valeur de l'entier naturel grâce à un int passé en paramètre ; cette
méthode générera une exception de type ErrModif si la valeur passée en paramètre est négative ;
- une méthode décremente() qui décrémente de 1 un objet EntNat ; cette méthode devra pouvoir lever une exception de
type ErrModif ;
- une méthode de classe – statique donc – décremente(EntNat e) qui décrémente de 1 l’objet passé en paramètre (c'est
juste pour que vous travaillez sur les méthodes de classe, il serait en effet normal d'en faire une méthode d'instance …)
Écrire une méthode main qui utilise les méthodes de la classe EntNat, en capturant les exceptions susceptibles d’être
générées.
CPO2 TD/TP 4
Page 4/5
S'il vous reste du temps :
- Organisez vos classes d'exception pour qu'elles dérivent toutes d’une classe ErrNat.
- Une exception doit mémoriser la valeur erronée qui a entrainé sa génération. Modifiez vos classes d'exception de façon
à ce qu'elles permettent le stockage de cette valeur, et fournissent une méthode permettant de consulter cette valeur.
Testez.
- Telle qu'elle est écrite, la classe EntNat est très contraignante : par exemple, lors de la création d'une instance de
EntNat, on est obligé de prendre en compte l'exception susceptible d'être générée par le constructeur, même si l'on sait
que la valeur passée en paramètres est correcte. Comment rendre optionnelle la prise en compte de ces exceptions ?
CPO2 TD/TP 4
Page 5/5