Programmation Orientée Objet

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

Flux de données Lecture/Ecriture Fichiers

Cours 14 Les fichiers

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

Projet de programmation (IK3) : TP n 1 Correction

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

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

PROGRAMMATION PAR OBJETS

Programmer en JAVA. par Tama

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

Développement Logiciel

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

Auto-évaluation Programmation en Java

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Langage Java. Classe de première SI

Remote Method Invocation (RMI)

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

Programmation Internet en Java

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

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

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

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

Java DataBaseConnectivity

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

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

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmation par les Objets en Java

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

ACTIVITÉ DE PROGRAMMATION

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

TP1 : Initiation à Java et Eclipse

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

RMI le langage Java XII-1 JMF

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

Threads. Threads. USTL routier 1

Programme Compte bancaire (code)

Héritage presque multiple en Java (1/2)

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

Une introduction à Java

Programmation système I Les entrées/sorties

TD/TP PAC - Programmation n 3

GESTION DES FICHIERS C/UNIX

Synchro et Threads Java TM

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

Introduction au langage Java

Environnements de développement (intégrés)

1 Lecture de fichiers

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

Programmation système de commandes en C

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Programmation Objet Java Correction

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

Introduction à JDBC. Accès aux bases de données en Java

Travaux Pratiques : Lucène - Gestion d un index plein texte

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

Java Licence Professionnelle CISII,

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Généralités sur le Langage Java et éléments syntaxiques.

Package Java.util Classe générique

Remote Method Invocation Les classes implémentant Serializable

TP, première séquence d exercices.

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Programmation impérative

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

INITIATION AU LANGAGE JAVA

Premiers Pas en Programmation Objet : les Classes et les Objets

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Design patterns. Design patterns - définition. Design patterns - avantages

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

Support de cours et TD Programmation Orientée Objet

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

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

TD/TP PAC - Programmation n 3

Chapitre 10. Les interfaces Comparable et Comparator 1

Initiation à JAVA et à la programmation objet.

Corrigé des exercices sur les références

as Architecture des Systèmes d Information

TP3 : Manipulation et implantation de systèmes de fichiers 1

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Cours 1: Java et les objets

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

TP Programmation Java / JDBC / Oracle

Programmation Par Objets

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

Programmation Réseau SSH et TLS (aka SSL)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Calcul Parallèle. Cours 5 - JAVA RMI

M1 MIAGE - Réseau TP1

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Objets et Programmation. origine des langages orientés-objet

Un ordonnanceur stupide

Cours de Système : Gestion de Fichiers

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

SYSTÈME DE GESTION DE FICHIERS

Java Licence professionnelle CISII,

Chapitre I Notions de base et outils de travail

Introduction : les processus. Introduction : les threads. Plan

Transcription:

Programmation Orientée Objet Programmation Java Saber HENI saber.heni02@univ-paris8.fr http://handiman.univ-paris8..fr/~saber/

Plan du cours Chapitre 1 : Introduction au langage Java Chapitre 2 : Classes et objets Chapitre 3 : Concepts de base de l OO Chapitre 4 : La gestion des exceptions Chapitre 5 : Les Entrées-sorties Chapitre 6 : Les classes de base de Java Chapitre 7 : Les interfaces graphiques Chapitre 8 : Les collections 2

Chapitre 5 Les Entrées/sorties

Introduction - 1 Tapez ce code sur votre machine import java.io.file; import java.io.ioexception; public class LesFlux { private File fichier ; public LesFlux (String url) { fichier = new File(url); public void créerfichier () { try { fichier.createnewfile(); catch (IOException e) { e.printstacktrace(); public static void main (String [] args) { LesFlux cke = new LesFlux ("C:/test.txt"); cke.créerfichier(); System.out.println("Fin du programme"); 4

Introduction - 2 Une entrée/sortie en Java consiste en un échange de données entre le programme et une autre source, par exemple la mémoire, un fichier, le programme lui-même. Java emploie ce qu'on appelle un stream (qui signifie «flux»). Celui-ci joue le rôle de médiateur entre la source des données et sa destination; En java, les flux peuvent être divisés en plusieurs catégories : les flux d'entrée (input stream) et les flux de sortie (output stream) les flux de traitement de caractères et les flux de traitement d'octets. 5

Introduction - 3 Java définit des flux pour lire ou écrire des données mais aussi des classes qui permettent de faire des traitements sur les données du flux. Ces classes doivent être associées à un flux de lecture ou d'écriture et sont considérées comme des filtres. Par exemple, il existe des filtres qui permettent de mettre les données traitées dans un tampon (buffer) pour les traiter par lots. Toutes ces classes sont regroupées dans le package java.io. 6

Les classes de gestion de flux Le nom des classes se décompose en un préfixe et un suffixe. Il y a quatre suffixes possibles en fonction du type de flux (flux d'octets ou de caractères) sens du flux (entrée ou sortie). Flux d'octets Flux de caractères Flux d'entrée InputStream Reader Flux de sortie OutputStream Writer 7

La classe java.io.file - 1 Il n'existe pas de classe pour traiter les répertoires car ils sont considérés comme des fichiers. Une instance de la classe File est une représentation logique d'un fichier ou d'un répertoire qui peut ne pas exister physiquement sur le disque. Si le fichier ou le répertoire existe, de nombreuses méthodes de la classe File permettent d'obtenir des informations sur le fichier. Sinon plusieurs méthodes permettent de créer des fichiers ou des répertoires. Voici une liste des principales méthodes : 8

La classe java.io.file - 2 boolean canread() boolean canwrite() boolean createnewfile() File createtempfile(string, String) File createtempfile(string, String, File) boolean delete() deleteonexit() boolean exists() indique si le fichier peut être lu indique si le fichier peut être modifié création d'un nouveau fichier vide création d'un nouveau fichier dans le répertoire par défaut des fichiers temporaires. Les deux arguments sont le nom et le suffixe du fichier. création d'un nouveau fichier temporaire. Les trois arguments sont le nom et le suffixe du fichier et le répertoire. détruire le fichier ou le répertoire. Le booléen indique le succès de l'opération demande la suppression du fichier à l'arrêt de la JVM indique si le fichier existe physiquement 9

La classe java.io.file - 3 String getabsolutepath() String getpath boolean isabsolute() boolean isdirectory() boolean isfile() long length() String[] list() boolean mkdir() boolean mkdirs() boolean renameto() renvoie le chemin absolu du fichier renvoie le chemin du fichier indique si le chemin est absolu indique si le fichier est un répertoire indique si l'objet représente un fichier renvoie la longueur du fichier renvoie la liste des fichiers et répertoires contenus dans le répertoire création du répertoire création du répertoire avec création des répertoires manquants dans l'arborescence du chemin renommer le fichier 10

La classe java.io.file - 4 Soit les deux exemples suivants import java.io.file; public class Main { public static void main(string[] args) { //Création de l'objet File File f = new File("test.txt"); System.out.println("Chemin absolu du fichier : " + f.getabsolutepath()); System.out.println("Nom du fichier : " + f.getname()); System.out.println("Est-ce qu'il existe? " + f.exists()); System.out.println("Est-ce un répertoire? " + f.isdirectory()); System.out.println("Est-ce un fichier? " + f.isfile()); 11

La classe java.io.file - 5 import java.io.file; public class Main2 { public static void main(string[] args) { File f = new File("test.txt"); System.out.println("Affichage des lecteurs à la racine du PC : "); for(file file : f.listroots()) { System.out.println(file.getAbsolutePath()); try { int i = 1; //On parcourt la liste des fichiers et répertoires for(file nom : file.listfiles()){ //S'il s'agit d'un dossier, on ajoute un "/" System.out.print("\t\t" + ((nom.isdirectory())? nom.getname()+"/" : nom.getname())); if((i%4) == 0){ System.out.print("\n"); i++; System.out.println("\n"); catch (NullPointerException e) { //L'instruction peut générer une NullPointerException //s'il n'y a pas de sous-fichier! 12

Les classes de java.io - 1 Les classes des flux de caractères. Flux de caractères Flux en lecture BufferedReader CharArrayReader FileReader InputStreamReader LineNumberReader StringReader Les classes des flux d octets. Flux d'octets BufferedInputStream ByteArrayInputStream DataInputStream FileInputStream ObjectInputStream Flux en sortie BufferedWriter CharArrayWriter FileWriter OutputStreamWriter StringWriter BufferedOutputStream ByteArrayOutputStream DataOuputStream FileOutputStream ObjetOutputStream PrintStream 13

Les classes de java.io - 2 Les préfixe des classes contiennent le type de traitement qu'ils effectuent. Les filtres n'existent pas obligatoirement pour des flux en entrée et en sortie. Buffered : ce type de filtre permet de mettre les données du flux dans un tampon. Il peut être utilisé en entrée et en sortie Data : ce type de flux permet de traiter les octets sous forme de type de données LineNumber : ce filtre permet de numéroter les lignes contenues dans le flux Print : ce filtre permet de réaliser des impressions formatées Object : ce filtre est utilisé par la sérialisation InputStream / OuputStream : ce filtre permet de convertir des octets en caractères 14

Les flux de caractères Reader et Writer

La classe Reader C'est une classe abstraite qui est la classe mère de toutes les classes qui gèrent des flux de caractères en lecture. Cette classe définit plusieurs méthodes : Méthodes boolean ready() close() int read() int read(char[]) int read(char[], int, int) long skip(long) Rôles indique si le flux est prêt à être lu ferme le flux et libère les ressources qui lui étaient associées renvoie le caractère lu ou -1 si la fin du flux est atteinte. lire plusieurs caractères et les mettre dans un tableau de caractères lire plusieurs caractères. Elle attend en paramètre : un tableau de caractères qui contiendra les caractères lus, l'indice du premier élément du tableau qui recevra le premier caractère et le nombre de caractères à lire. Elle renvoie le nombre de caractères lus ou -1 si aucun caractère n'a été lu. Le tableau de caractères contient les caractères lus. saute autant de caractères dans le flux que la valeur fournie en paramètre. Elle renvoie le nombre de caractères sautés. 16

La classe Writer C'est une classe abstraite qui est la classe mère de toutes les classes qui gèrent des flux de caractères en écriture. Cette classe définit plusieurs méthodes : Méthodes close() write(int) write(char[]) write(char[], int, int) write(string) write(string, int, int) Rôles ferme le flux et libère les ressources qui lui étaient associées écrire le caractère en paramètre dans le flux. écrire le tableau de caractères en paramètre dans le flux. écrire plusieurs caractères. Elle attend en paramètres : un tableau de caractères, l'indice du premier caractère et le nombre de caractères à écrire. écrire la chaîne de caractères en paramètre dans le flux écrire une portion d'une chaîne de caractères. Elle attend en paramètre : une chaîne de caractères, l'indice du premier caractère et le nombre de caractères à écrire. 17

La classe FileReader - 1 La classe FileReader permet de gérer des flux de caractères avec des fichiers en lecture. Pour l utiliser, il faut instancier un objet de la classe FileReader. Cette classe hérite de la classe InputStreamReader et possède plusieurs constructeurs qui peuvent tous lever une exception de type FileNotFoundException: Constructeur FileReader(String) FileReader(File) Rôle Créer un flux en lecture vers le fichier dont le nom est précisé en paramètre. Idem mais le fichier est précisé avec un objet de type File. Exemple FileReader fichier = new FileReader("monfichier.txt"); 18

La classe FileReader - 2 Il existe plusieurs méthodes de la classe FileReader qui permettent de lire un ou plusieurs caractères dans le flux. Toutes ces méthodes sont héritées de la classe Reader et peuvent toutes lever l'exception IOException. Une fois les traitements sur le flux terminés, il faut libérer les ressources qui lui sont allouées en utilisant la méthode close(). 19

La classe FileWriter La classe FileWriter permet de gérer des flux de caractères avec des fichiers en écriture. Il existe plusieurs méthodes de la classe FileWriter héritées de la classe Writer qui permettent d'écrire un ou plusieurs caractères dans le flux. Pour l utiliser, il faut instancier un objet de la classe FileWriter. Cette classe hérite de la classe InputStreamWriter et possède plusieurs constructeurs. Constructeur FileWriter(String) FileWriter(File) FileWriter(String, boolean) Rôle Si le nom du fichier précisé n'existe pas alors le fichier sera créé. Si il existe et qu'il contient des données celles-ci seront écrasées. Idem mais le fichier est précisé avec un objet de la classe File. Le booléen permet de préciser si les données seront ajoutées au fichier (valeur true) ou écraseront les données existantes (valeur false) Exemple FileWriter fichier = new FileWriter ("monfichier.dat"); 20

La classe BufferedReader - 1 Pour améliorer les performances des flux sur un fichier, la mise en tampon des données lues ou écrites permet de traiter un ensemble de caractères représentant une ligne plutôt que de traiter les données caractères par caractères. Le nombre d'opérations est ainsi réduit. La classe BufferedReader permet de gérer des flux de caractères tamponnés avec des fichiers en entrée (Lecture). Pour l utiliser, il faut instancier un objet de la classe BufferedReader. Cette classe possède plusieurs constructeurs qui peuvent tous lever une exception de type FileNotFoundException: 21

La classe BufferedReader - 2 Les constructeurs Constructeur BufferedReader(Reader) BufferedReader(Reader, int) Rôle le paramètre fourni doit correspondre au flux à lire. l'entier en paramètre permet de préciser la taille du buffer. Il doit être positif sinon une exception de type IllegalArgumentException est levée. Il existe plusieurs méthodes de la classe BufferedReader héritées de la classe Reader qui permettent de lire un ou plusieurs caractères dans le flux. Toutes ces méthodes peuvent lever une exception de type IOException. La classe BufferedReader définit une méthode supplémentaire pour la lecture : Méthode String readline() Rôle lire une ligne de caractères dans le flux. Une ligne est une suite de caractères qui se termine par un retour chariot '\r' ou un saut de ligne '\n' ou les deux. 22

La classe BufferedReader - 3 Exemple import java.io.*; public class TestBufferedReader { protected String source; public TestBufferedReader(String source) { this.source = source; lecture(); public static void main(string args[]) { new TestBufferedReader("source.txt"); private void lecture() { try { String ligne ; BufferedReader fichier = new BufferedReader(new FileReader(source)); while ((ligne = fichier.readline())!= null) { System.out.println(ligne); fichier.close(); catch (Exception e) { e.printstacktrace(); 23

La classe BufferedWriter - 1 Pour améliorer les performances des flux sur un fichier, la mise en tampon des données lues ou écrites permet de traiter un ensemble de caractères représentant une ligne plutôt que de traiter les données caractères par caractères. Le nombre d'opérations est ainsi réduit. La classe BufferedWriter permet de gérer des flux de caractères tamponnés avec des fichiers en sortie (Ecriture). Pour l utiliser, il faut instancier un objet de la classe BufferedWriter. Cette classe possède plusieurs constructeurs. 24

La classe BufferedWriter - 2 Les constructeurs Constructeur BufferedWriter(Writer) BufferedWriter(Writer, int) Rôle le paramètre fourni doit correspondre au flux dans lequel les données sont écrites. l'entier en paramètre permet de préciser la taille du buffer. Il doit être positif sinon une exception IllegalArgumentException est levée. Il existe plusieurs méthodes de la classe BufferedWriter héritées de la classe Writer qui permettent de lire un ou plusieurs caractères dans le flux. La classe BufferedWriter possède plusieurs méthodes pour gérer le flux : Méthode flush() newline() Rôle vide le tampon en écrivant les données dans le flux. écrire un séparateur de ligne dans le flux 25

La classe BufferedWriter - 3 Exemple import java.io.*; import java.util.*; public class TestBufferedWriter { protected String destination; public TestBufferedWriter(String destination) { this.destination = destination; traitement(); public static void main(string args[]) { new TestBufferedWriter("print.txt"); private void traitement() { try { String ligne ; int nombre = 123; BufferedWriter fichier = new BufferedWriter(new FileWriter(destination)); fichier.write("bonjour tout le monde"); fichier.newline(); fichier.write("nous sommes le "+ new Date()); fichier.write(", le nombre magique est " + nombre); fichier.close(); catch (Exception e) { e.printstacktrace(); 26

Les flux d octets InputStrem et OutputStream

La classe InputStream - 1 Classe abstraite définissant les méthodes principales de lecture dans un flux d'octets. C'est la super classes de toutes les classes permettant de lire dans un flux d'octets. abstract int read() throws IOException int read(byte [] t)throws IOException int read(byte[] t, int d, int l) throws IOException Lit l'octet suivant dans le flux, et le retourne. S'il n'y a pas d'octet suivant (parce que la fin de fichier est atteinte), retourne -1. Lit au maximum t.length octets depuis le fichier et les range dans le tableau t. si t a une taille 0, aucun octet est lu et la méthode retourne 0. si t a une taille non nulle : La méthode retourne le nombre d'octets qui ont été lus. retourne -1 si la fin de fichier est atteinte. Lit au maximum l octets depuis le fichier et les range dans le tableau t à partir de d. La même chose que la méthode précédente. 28

La classe InputStream - 2 Autres méthodes int available() int read(byte[] t, int d, int l) throws IOException voidclose() throws IOException Le nombre d'octets qui peuvent être lus (ou sautés) sans que l'opération soit bloquante. La méthode définie dans la classe retourne 0. Pour un fichier available retourne le nombre d'octets du fichier ; pour une connexion réseau, le nombre d'octets disponible à un moment donné. Saute n octets, et renvoie le nombre d'octets effectivement sautés. Fermeture du flux. 29

La classe OutputStream Classe abstraite définissant les méthodes principales d'écriture dans un flux d'octets. C'est la super classes de toutes les classes permettant d'écrire dans un flux d'octets. void write(int i) void write(byte[] t ) void write (byte t, int d, int l) void close() Ecrit l'octet de droite de l'entier i dans le flux. Ecrit tous les octets du tableau t dans le flux. Ecrit tous les l octets du tableau t à partir de l'indice d, dans le flux. Ferme le flux et libère les ressources qui lui étaient associées Toutes ces méthodes peuvent lever des IOException. 30

La classe FileInputStream - 1 Cette classe hérite de la classe abstraite InputStream, présente dans le package java.io. Elle permet de gérer des flux d'octets en entrée avec des fichiers. Pour pouvoir l utiliser, il faut instancier un objet de la classe FileInputStream. Cette classe possède plusieurs constructeurs qui peuvent tous lever l'exception FileNotFoundException. Constructeurs FileInputStream(String) FileInputStream(File) Rôle Ouvre un flux en lecture sur le fichier dont le nom est donné en paramètre Idem mais le fichier est précisé avec un objet de type File 31

La classe FileInputStream - 2 Exemple public class TestFluxOctetsEnLecture { public static void main (String [] args) { try { FileInputStream fichier = new FileInputStream("monfichier.dat"); int octet = 0; while (octet!= -1 ) { octet = fichier.read(); catch (IOException e) { e.printstacktace(); Cette classe hérite de toutes les méthodes de InputStream. 32

La classe FileOutputStream - 1 Cette classe hérite de la classe abstraite OutputStream, présente dans le package java.io. Elle permet de gérer des flux d'octets en sortie avec des fichiers. Pour pouvoir l utiliser, il faut instancier un objet de la classe FileOutputStream. Cette classe possède plusieurs constructeurs qui peuvent tous lever l'exception FileNotFoundException. Constructeur FileOutputStream(String) FileOutputStream(String, boolean) Rôle Si le fichier précisé n'existe pas, il sera créé. Si il existe et qu'il contient des données celles-ci seront écrasées. Le booléen permet de préciser si les données seront ajoutées au fichier (valeur true) ou écraseront les données existantes (valeur false) 33

La classe FileOutputStream - 2 Il existe plusieurs méthodes de la classe FileOutputStream qui permettent d'écrire un ou plusieurs octets dans le flux. write(int) Cette méthode écrit l'octet en paramètre dans le flux. write(byte[]) Cette méthode écrit plusieurs octets. Elle attend en paramètre : un tableau d'octets qui contient les octets à écrire : tous les éléments du tableau sont écrits. write(byte[], int, int) Cette méthode écrit plusieurs octets. Elle attend en paramètre : un tableau d'octets qui contient les octets à écrire, l'indice du premier élément du tableau d'octets à écrire et le nombre d'octets à écrire. 34

Fin chapitre 5 (Les E/S)