Java Exception et Entrée/Sortie
Plan Exception Principe, utilisation, création Paquetage java.io Notion de flots Organisation du paquetage Flots d octets Flots de caractères Exceptions
Principe Définition : «An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions.» (sun.com tutorial) Objectif : Programmer explicitement la gestion des erreurs bibliothèque d exceptions Résultats : la gestion des erreurs est distincte du code de l application. un mécanisme dédié à la propagation / capture des erreurs une typologie des erreurs
Exception Principe : Classe Définir une classe. classe mère : classe Exception ou une de ses sous classes.
Exception Déclenchement Création MonException me = new MonException( ); Lancement throws me; Faire suivre <visibilité> <type> mamethode ( ) throw MonException{ }
Exception try{ Capture // bloc dont on souhaite contrôler l exécution. } catch (MonException x) { code à exécuter si l exception mon Exception a été détecté. } finally{ // code réalisé dans tous les cas. }
Exemple public int compareto(object o) throws ClassCastException{ int comparaison = -2; if (o instanceof Figure){ Figure f = (Figure)o; if (f.perimetre() > perimetre()) comparaison = -1; else if (f.perimetre() < perimetre()) comparaison = 1; else comparaison = 0; }else throw(new ClassCastException ()); return comparaison; }
Plan Exception Principe, utilisation, création Paquetage java.io Notion de flots Organisation du paquetage Flots d octets Flots de caractères Exceptions
Principe les échanges de données entre un programme et l extérieur (autre programme, fichier, réseau) sont effectués par un «flot» de données. Un flot permet de transporter séquentiellement des données. Les données sont transportées une par une (ou groupe par groupe), de la
Principe Sources et destinations de flots Fichier, socket, pipe, clavier Cycle : Ouverture flot Tant qu il y a des données à lire (ou à écrire) on lit (ou on écrit) la donnée suivante dans le flot Fermeture du flot Types de flots: flots d octets flots de caractères
Flots d octets
InputStream classe abstraite Principales méthodes : void close() ferme le flux et libère les ressources abstract int read() lit le prochain octet sur le flux. int read(byte[] b) stock le résultat de la lecture dans un tableau void mark(int readlimit) et void reset() certains flux acceptent le marquage de positions pour arrêter une lecture et la reprendre au même endroit long skip(long n) ne pas lire les n octets suivants.
Principe Reconnaître un type de source ou de destination concrètes : Exemple : pour un fichier File{In/Out}putStream (un flot d octets) File{Reader/Writer} : (un flot de caractères) «Décorer» le traitement du flot Exemple : ajoute un buffer Buffered{In/Out}putStream (un flot d octets)
Flux d octets en entrée Classes Classes utilisées pour la communication FileInputStream lecture de fichiers octets par octets. PipedInputStream récupère des données provenant d'un flux de sortie (cf. PipedOutputStream). ByteArrayInputStream lit des données dans un tampon structuré sous forme d'un array. Classes utilisées pour le traitement SequenceInputStream concaténation d'une énumération de plusieurs flux d'entrée en un seul flux d'entrée. StringBufferInputStream lecture d'une String (Sun déconseille son utilisation et préconise son remplacement par StringReader). ObjectInputStream lecture d'objets Java. FilterInputStream lit à partir d'un InputStream quelconque des données, en "filtrant" certaines données.
Flux d octets en sortie Classes Classes utilisées pour la communication FileOutputStream écriture de fichiers octets par octets. PipedOutputStream envoie des données vers un flux d'entrée ( cf. PipedInputStream ). ByteArrayOutputStream écrit des données dans un tampon structuré sous forme d'un array. Classes utilisées pour le traitement ObjectOutputStream écriture d'objets Java lisibles avec ObjectInputStream. FilterOutputStream écrit à partir d'un OutputStream quelconque des données, en "filtrant" certaines données.
Exemple fichier Création du flux depuis un fichier. FileInputStream fis=new FileInputStream("fichier"); création d une décoration : un buffer en lecture BufferedInputStream bis=new BufferedInputStream(fis); création d une décoration : lecture des types primitifs en standard. DataInputStream dis = new DataInputStream(bis); Résultat : DataInputStream dis = new DataInputStream(new BufferedInputStream (new FileInputStream ("fichier")))
Exemple fichier try{ // création du fichier et du flot associé. File f0 = new File("source.txt"); DataOutputStream source = new DataOutputStream(new FileOutputStream (f0)); source.writeint(23); source.writechar('e'); source.close(); // lecture du fichier et du flot associé File f = new File("source.txt"); DataInputStream dis = new DataInputStream(new FileInputStream (f)); System.out.println(dis.readInt()); System.out.println(dis.readChar()); dis.close(); }catch (IOException e){ System.out.println(e); }
Flot de caractères
Flux en entrée BufferedReader lecture de caractères dans un tampon. CharArrayReader lit de caractères dans un tampon structuré sous forme d'un array. FileReader lecture de caractères dans un fichier texte. FilterReader lit à partir d'un Reader quelconque des caractères, en "filtrant" certaines caractères. InputStreamReader conversion de flux d'octets en flux de caractères (8 bits en 16 bits) LineNumberReader lecture de caractères dans un tampon (dérive de BufferedReader) avec comptage de lignes. PipedReader récupère des données provenant d'un flux de caractères en sortie (cf. PipedWriter). StringReader lecture de caractères à partir d'une Classe
StringWriter écriture de caractères dans une chaîne de type String. Flux en sortie Exemple BufferedWriter écriture de caractères dans un tampon. CharArrayWriterWriter écrit des caractères dans un tampon structuré sous forme d'un array. FileWriter écriture de caractères dans un fichier texte. FilterWriter écrit à partir d'un Reader quelconque des caractères, en "filtrant" certaines caractères. OutputStreamWriter conversion de flux d'octets en flux de caractères (8 bits en 16 bits) PipedWriter envoie des données vers un flux d'entrée (cf. PipedReader).
Exemple : fichier try{ // lecture du fichier et du flot associé File f = new File("source.txt"); BufferedReader source = new BufferedReader(new FileReader (f)); String ligne = source.readline(); while ( ligne!= null){ System.out.println(ligne); ligne = source.readline(); } }catch (IOException e){ System.out.println(e); }