TP de Java Exceptions et E/S. catch (IOException ioe) { System.out.println(" E/S problem :" + ioe);

Documents pareils
Flux de données Lecture/Ecriture Fichiers

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Cours 14 Les fichiers

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Programmer en JAVA. par Tama

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Programmation Par Objets

Développement Logiciel

Corrigé des exercices sur les références

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Dis papa, c est quoi un bus logiciel réparti?

Java Licence Professionnelle CISII,

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Introduction au langage Java

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Programmation Internet en Java

Synchro et Threads Java TM

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Gestion distribuée (par sockets) de banque en Java

Chapitre 10. Les interfaces Comparable et Comparator 1

Package Java.util Classe générique

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

et se trouve popularisé rapidement pour ses possibilités de développement liés au Web. Les

ACTIVITÉ DE PROGRAMMATION

Plan du cours. Historique du langage Nouveautés de Java 7

Programmation Réseau SSH et TLS (aka SSL)

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Un ordonnanceur stupide

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Langage Java. Classe de première SI

Auto-évaluation Programmation en Java

La gestion des exceptions

1. Langage de programmation Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage à objets : JAVA (1)

Programmation Objet Java Correction

Desktop Intégration. Rémi Forax

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Cours 1: Java et les objets

Le Modèle de Sécurité dans JAVA

Premiers Pas en Programmation Objet : les Classes et les Objets

OpenPaaS Le réseau social d'entreprise

Serveur d'archivage 2007 Installation et utilisation de la BD exist

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Tp 1 correction. Structures de données (IF2)

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Projet de programmation (IK3) : TP n 1 Correction

Threads. Threads. USTL routier 1

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Une introduction à Java

Support de cours et TD Programmation Orientée Objet

PROGRAMMATION PAR OBJETS

INF 321 : mémento de la syntaxe de Java

Programmation avec des objets : Cours 7. Menu du jour

7 Développement d une application de MapReduce

Modèle à composants. Daniel Hagimont. IRIT/ENSEEIHT 2 rue Charles Camichel - BP TOULOUSE CEDEX 7. Remerciements

Introduction : les processus. Introduction : les threads. Plan

Applet pour visualiser les variables «automate» notifiées

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmation client-serveur sockets - RPC

Arbres binaires de recherche

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Initiation à la programmation orientée-objet avec le langage Java

INITIATION AU LANGAGE JAVA

LOG4430 : Architecture logicielle et conception avancée

Programmation d application Bases de données avec Java

Calcul Parallèle. Cours 5 - JAVA RMI

MapReduce et Hadoop. Alexandre Denis Inria Bordeaux Sud-Ouest France ENSEIRB PG306

TP Programmation Java / JDBC / Oracle

Programmation Objet 2

TD3: tableaux avancées, première classe et chaînes

Architecture Orientée Service, JSON et API REST

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

COMPARAISONDESLANGAGESC, C++, JAVA ET

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

as Architecture des Systèmes d Information

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Remote Method Invocation Les classes implémentant Serializable

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

APPRENTISSAGE DU LANGAGE JAVA. Serge Tahé - ISTIA - Université d'angers Septembre 98 - Révision juin 2002

TP, première séquence d exercices.

Java DataBaseConnectivity

Java Licence Professionnelle CISII,

Solutions du chapitre 4

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Utilisation d objets : String et ArrayList

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Programmation par les Objets en Java

Remote Method Invocation (RMI)

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Notes de cours Practical BigData

Programme Compte bancaire (code)

Transcription:

TP de Java Exceptions et E/S Sujets abordés dans ce TP : Bloc try/catch/finally Déclenchement d exception Redéfinition d exception Taxonomie des exceptions Gestion de fichiers Tokenizer 1) Les erreurs et les exceptions Introduction catch (IOException ioe) { System.out.println(" E/S problem :" + ioe); catch (NumberFormatException nfe) { System.out.println(" NumberFormat problem " + nfe); finally { System.out.println("#4"); Durant l exécution d un programme, il peut se produire des événements anormaux (et inattendus) comme par exemple : un utilisateur pourrait écrire un nom de fichier inadmissible, un dossier pourrait contenir des données corrompues, etc. On peut prendre en compte des circonstances de ce type en Java via les mécanismes d exception. Un sous-arbre de la hiérarchie de classes, ayant pour classe racine la classe java.lang.throwable, y est consacré. Aider vous de la documentation de ce package dans l API specification afin d analyser les différents exemples durant ce TP. En Java, la gestion des exceptions se fait via l emploi d une structure de type try/catch/finally. L exemple suivant donne une première implémentation d exception pour la lecture d un fichier texte, et le résultat commenté de l exécution de cet exemple. import java.io.fileinputstream; public class Tp3_ex1 { String filename = "todo.txt"; String nstring = "10"; FileInputStream fis; System.out.println("#1"); fis = new FileInputStream(fileName); System.out.println("#2"); Si todo.txt existe et nstring est un nombre entier alors la sortie de ce programme est : #1 #2 #3 #4 Si le fichier de nom contenu dans la String filename n existe pas alors la sortie de ce programme est : #1 E/S problem :java.io.filenotfoundexception: todo.txt (Le fichier spécifié est introuvable) #4 Si la chaîne de caractères nstring n est pas un nombre entier alors : #1 #2 NumberFormat problem java.lang.numberformatexception: For input string: "10sd" #4 Conclusions: - une exception produite dans le bloc «try» est manipulée par la clause «catch» assortie - quand une exception est produite tout le code dans le bloc d'essai après l'endroit où l'exception a eu lieu n'est pas exécuté. - «finally» est toujours exécuté Integer n = new Integer(nString); System.out.println("#3"); 1

Première mise en œuvre La forme la plus générale de l implémentation du bloc try/catch/finally est: // instructions : // certaines sont sûres, certaines pourraient déclencher //des exceptions catch (SpecificException e) { // faites quelque chose pour SpecificException, //peut-être un essai pour récupérer les données // qui pourraient être perdues catch (OtherException e) // faites quelque chose pour OtherException catch (GeneralException e) { // faites quelque chose pour GeneralException finally { // code qui doit être exécuté que l exception ait été // déclenchée ou non Remarque : «finally» est facultatif. Implémenter et mettre en oeuvre le code suivant, commenter. int a; try {a=1; a= 1/0; catch(exception e) {System.out.println("Number Exception"); finally {a=-1; System.out.println(a); Déclencher des exceptions Nous continuerons dans cette partie du TP en examinant comment des exceptions peuvent être déclenchées. En effet, dans une application c est l analyse des données véhiculées qui peut conduire cette application à déclencher une ou des exception(s). Dans ce cas, le programmeur Java aura recours à l instruction throw : throw new Exception(); Il existe deux moyens d utiliser l instruction trow : 1. dans un bloc try, 2. dans une méthode déclarée comme susceptible de déclencher une/des exception(s) à l aide du mot clé throws. Implémenter et mettre en œuvre le code suivant, commenter : import java.io.*; class Test1 { void test1() { throw new Exception(); catch(exception e) {System.out.println("first exception a"); void test2() throws Exception{ throw new Exception(); public class Except { public static void main(string args[]) { new Test1().test1(); new Test1().test1(); catch(exception e) {System.out.println("first exception b"); Dans l exemple précédent, vous avez vu qu une méthode susceptible de déclencher des exceptions se doit de les déclarer à l aide du mot clé throws. Il possible pour une méthode de déclarer plusieurs types d exceptions de la manière suivante : public int monmethode()throws IOException, MonException1,MonException2 { 2

throw new IOException( quelque-chose ); Définir des exceptions L API specification permet d utiliser un ensemble d exceptions standards. Il est cependant possible pour le programmeur Java de définir ses propres exceptions. Pour cela, il doit définir une classe héritant de classe Exception. Implémenter et mettre en oeuvre l exemple suivant, commenter : Taxonomie des exceptions Les exceptions en Java sont définies selon une certaine taxonomie. La figure suivante présente cette taxonomie, vous pouvez consulter le package java.lang dans l API specification pour plus de détails. import java.io.*; class CompteException extends Exception{ String motif; CompteException(String s) { super(s); motif=s; public class Tp3_ex2 { private int compte; Tp3_ex2(int montant) { this.compte = montant; void retireargeant(int montant) throws CompteException { if (montant > compte) { throw new CompteException("Possibilités de retrait épuise"); else {compte = compte - montant; Tp3_ex2 compte1 = new Tp3_ex2(1000); compte1.retireargeant(2000); catch (CompteException ce) {ce.printstacktrace(); 1. Les exceptions «vérifiées» (checked) traitent des problèmes qui peuvent surgir dans un programme considéré comme «valide». Typiquement, ce type d exception concerne : les problèmes d installation de package, les erreurs utilisateurs, les problèmes de lecture/écriture, etc. Un certains nombre de classes standards existent comme les classes : IOException, ClassNotFoundException, etc. 2. Les exceptions d'exécutions (runtime) traitent typiquement les bogues apparaissant durant l exécution des programmes. Un problème type est celui de l accès à des données non allouées au sein d un tableau (ou dépassement d indice). Dans un programme correctement implémenté, ce type d exception devrait en théorie ne jamais se produire. Un certain nombre de classes standards existent comme les classes : NumberFormatException, NullPointerException, ArrayIndexOutOfBoundsException, etc. 3. Les exceptions d erreurs (error) traitent les problèmes atypiques qui ne peuvent être associés aux deux premières catégories d exceptions. Ces problèmes peuvent concerner des bogues d exécution, mais traitent le plus souvent des problèmes systèmes comme le dépassement de mémoire. Un certains nombre de classes standards existent comme les classes : OutOfMemoryError, StackOverflowError, etc. 3

L exemple suivant met en œuvre ces différentes exceptions, implémenter le : import java.io.fileinputstream; public class Tp3_ex3 { public static void main(string args[]) { int x = 1;//-1 int y = 1;//0 int z[]= new int[3]; // Runtime Exceptions System.out.println(" x/y="+(x/y)); System.out.println(" z[x]="+z[x]); // Checked Exception try{ FileInputStream f = new FileInputStream("todo.txt"); catch(ioexception ioe) { ioe.printstacktrace(); // Error int M = 1000000000; Double[] d = new Double[M]; Le mettre en oeuvre de la façon suivante, commenter : Si y == 0 alors la sortie contient : java.lang.arithmeticexception: / by zero C'est une Runtime Exception. 2) Classes d entrée et de sortie Introduction Dans cette partie nous présentons quelques classes standards Java pour l accès de données en entrée/sortie de vos programmes. Ces classes traitent donc de problèmes susceptibles de déclencher des exceptions, elles s appuient sur les notions présentées en première partie de ce TP. Classe java.io.file La classe java.io.file représente le nom d'un dossier ou d'un fichier qui pourrait exister sur le système de fichiers de l'ordinateur. Ses méthodes principales pour la navigation sont : boolean exists() boolean isdirectory() boolean isfile() String[] list() Quelques méthodes de non-navigation sont : boolean delete() boolean mkdir() Implémenter et mettre en oeuvre l exemple suivant, commenter : import java.io.file; public class Tp3_ex4 { String name = "todo.txt"; File f = new File(name); System.out.println("f.exists()" + f.exists()); System.out.println("f.isDirectory()" + f.isdirectory()); Si y!=0 && x== -1 par example la sortie contient: java.lang.arrayindexoutofboundsexception: -1 C est une Runtime Exception. Si (y!=0)&&(x>=0)&&(x<3) mais n existe pas un fichier avec le nomme todo.txt alors : java.io.filenotfoundexception: todo.txt (Le fichier spécifié est introuvable) C est une Checked Exception. Si y et x sont ok et todo.txt existe alors la sortie contient : java.lang.outofmemoryerror C est une Error. if (f.isdirectory()) { String[] list = f.list(); for (int i = 0; i < list.length; i++) { System.out.println(" " + list[i]); 4

Classe java.io.randomaccessfile La classe java.io.randomaccessfile permet de chercher dans une position désirée dans un fichier, et alors lire ou écrire une quantité désirée de données. Implémenter et mettre en oeuvre l exemple suivant, commenter : import java.io.file; import java.io.randomaccessfile; public class Tp3_ex5 { File f = new File("nomFichier"); RandomAccessFile raf = new RandomAccessFile(f, "rw"); char ch = raf.readchar(); raf.seek(f.length()); raf.writechars("astring"); raf.close(); catch (IOException e) { e.printstacktrace(); Classe java.io.bufferedreader Implémenter et mettre en oeuvre l exemple suivant pour la lecture de données au clavier, commenter : import java.io.bufferedreader; import java.io.inputstreamreader; public class Tp3_ex6 { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); String str = ""; while (str!= null) { System.out.print("> prompt "); str = in.readline(); System.out.println(str); catch (IOException e) {e.printstacktrace(); Implémenter et mettre en oeuvre l exemple suivant pour la lecture d un fichier texte, commenter : import java.io.bufferedreader; import java.io.filereader; public class Tp3_ex7 { BufferedReader in = new BufferedReader( new FileReader("todo.txt")); String str; While ((str = in.readline())!= null) {System.out.println(""+str); in.close(); catch (IOException e) {e.printstacktrace(); Classe java.util.stringtokenizer La «tokenization» permet de décomposer une chaîne de caractères donnée selon des tokens donnés. Considérons que nous lisons une ligne de ce type : bx 20 ax 10 5

La décomposition en tokens de cette chaîne a pour but de trouver «bx» et «ax» et les numéros 10 et 20. Implémenter et mettre en oeuvre l exemple suivant, commenter : import java.util.stringtokenizer; public class Tp3_ex8 { String astring = "mot1 mot2 mot3"; StringTokenizer parser = new StringTokenizer(aString); while (parser.hasmoretokens()) { System.out.println(parser.nextToken()); Classe java.io.bufferedwriter Implémenter et mettre en oeuvre l exemple suivant, commenter : import java.io.bufferedwriter; import java.io.filewriter; public class Tp3_ex9 { BufferedWriter out = new BufferedWriter(new FileWriter("outfilename")); out.write("astring"); out.close(); catch (IOException e) {e.printstacktrace(); 6