Cours Java - Entrées/Sorties PDF
Document Details
Uploaded by CharismaticQuasimodo5649
Département de Génie Informatique
A. Mazoul
Tags
Summary
Ce document est un cours sur les entrées/sorties en Java. Il explique les différents types de flux et comment lire et écrire des données dans des fichiers.
Full Transcript
Programmation Orientée Objet et Langage Java 5- Les entrées/sorties Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Programmation orienté objet en Java...
Programmation Orientée Objet et Langage Java 5- Les entrées/sorties Module: Programmation Objet Avancée A.Mazoul Département Génie informatique Programmation orienté objet en Java Les entrées/sorties Les entrées/sorties? 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, Réseau… Java emploie ce qu'on appelle un stream (flux) échanger les données avec une source. Toute opération sur les entrées/sorties doit suivre le schéma suivant : ouverture, lecture(in)/écriture(out), fermeture du flux. En Java, les opérations d'entrées-sorties de base sont gérées par les classes du package java.io. Qui possède deux classes principales: InputStream : cette classe abstraite définit les fonctions de lecture , OutputStream : cette classe abstraite définit les fonctions d'écriture. A.Mazoul Programmation orienté objet Java 2 Programmation orienté objet en Java Les entrées/sorties La présentation des flux Les flux (streams en anglais) permettent d'encapsuler ces processus d'envoi et de réception de données. Les flux traitent toujours les données de façon séquentielle. A.Mazoul Programmation orienté objet Java 3 Programmation orienté objet en Java Les entrées/sorties Les flux d'octets en écriture sur un fichier Java FileOutputStream est un flux de sortie utilisé pour écrire des données dans un fichier. La classe FileOutputStream possède plusieurs constructeurs : FileOutputStream(String): 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. FileOutputStream(String, boolean) : 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). Dossier du projet A.Mazoul Programmation orienté objet Java 4 Programmation orienté objet en Java Les entrées/sorties Les flux d'octets en écriture sur un fichier 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 A.Mazoul Programmation orienté objet Java 5 Programmation orienté objet en Java Les entrées/sorties Les flux d'octets en lecture sur un fichier La classe FileInputStream possède plusieurs constructeurs qui peuvent tous lever l'exception FileNotFoundException: FileInputStream(String): Ouvre un flux en lecture sur le fichier dont le nom est donné en paramètre FileInputStream(File): Ouvre un flux en lecture sur le fichier mais le fichier est précisé avec un objet de type File. Il existe plusieurs méthodes de la classe FileInputStream qui permettent de lire un ou plusieurs octets dans le flux. Toutes ces méthodes peuvent lever l'exception IOException. int read(): envoie la valeur de l'octet lu ou -1 si la fin du flux est atteinte. int read(byte[], int, int) : Cette méthode lit plusieurs octets. Elle renvoie le nombre d'octets lus ou -1 si aucun octet n'a été lu. A.Mazoul Programmation orienté objet Java 6 Programmation orienté objet en Java Les entrées/sorties Les flux d'octets en lecture sur un fichier Exemple A.Mazoul Programmation orienté objet Java 7 Programmation orienté objet en Java Les entrées/sorties Les flux de caractères tamponnés avec un fichier 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. Les classes BufferedOutputStream et BufferedInputStream permettent de gérer des flux de caractères tamponnés avec des fichiers. A.Mazoul Programmation orienté objet Java 8 Programmation orienté objet en Java Les entrées/sorties Les flux de caractères tamponnés écriture avec un fichier La classe Java BufferedOutputStream est utilisée pour mettre en mémoire tampon un flux de sortie. Il utilise en interne un tampon pour stocker les données. Cela ajoute plus d'efficacité que d'écrire des données directement dans un flux. Ainsi, cela rend la performance rapide. BufferedOutputStream(OutputStream os): Il crée le nouveau flux de sortie mis en mémoire tampon qui est utilisé pour écrire les données dans le flux de sortie spécifié. void write(int b) : Il écrit l'octet spécifié dans le flux de sortie mis en mémoire tampon. void flush() : Il vide le flux de sortie mis en mémoire tampon. A.Mazoul Programmation orienté objet Java 9 Programmation orienté objet en Java Les entrées/sorties Les flux de caractères tamponnés écriture avec un fichier Exemple A.Mazoul Programmation orienté objet Java 10 Programmation orienté objet en Java Les entrées/sorties Les flux de caractères tamponnés en lecture avec un fichier La classe Java BufferedInputStream est utilisée pour lire les informations du flux. Il utilise en interne un mécanisme de tampon pour accélérer les performances. BufferedInputStream(InputStream IS): Il crée le BufferedInputStream et l'enregistre en argument, le flux d'entrée IS, pour une utilisation ultérieure. A.Mazoul Programmation orienté objet Java 11 Programmation orienté objet en Java Les entrées/sorties Utilisation de FileWriter & FileReader FileWriter est une sous-classe de OutputStreamWriter, utilisé pour écrire dans les fichiers texte. FileReader est utilisée pour lire les données du fichier. Il renvoie des données au format d'octet comme la classe FileInputStream. A.Mazoul Programmation orienté objet Java 12 Programmation orienté objet en Java Les entrées/sorties Utilisation de FileWriter & FileReader tamponnés A.Mazoul Programmation orienté objet Java 13 Programmation orienté objet en Java Les entrées/sorties Sérialisation d'objets Sérializer un objet consiste à le convertir en un tableau d'octets, que l'on peut ensuite écrire dans un fichier, envoyer sur un réseau au travers d'une socket etc... Il suffit de passer tout objet qui implémente l'interface Serializable à une instance de ObjectOutputStream pour sérialiser un objet. L'opération inverse de la sérialisation est appelée désérialisation où le flux d'octets est converti en un objet. Pour sérialiser l'objet, nous appelons la méthode writeObject() de la classe ObjectOutputStream et pour la désérialisation, nous appelons la méthode readObject() de la classe ObjectInputStream. A.Mazoul Programmation orienté objet Java 14 Programmation orienté objet en Java Les entrées/sorties Sérialisation d'objets La classe Personne suivante implémente l'interface Serializable. Maintenant, ses objets peuvent être convertis en flux. Les attributs marquées avec le mot-clé transient seront retirées du flux sérializé. et après désérialization, ces champs seront à null. A.Mazoul Programmation orienté objet Java 15 Programmation orienté objet en Java Les entrées/sorties Sérialisation d'objets Sauvegarder deux objets de type Personne dans le fichier monfichier.txt A.Mazoul Programmation orienté objet Java 16 Programmation orienté objet en Java Les entrées/sorties Sérialisation d'objets Lire les deux objets de type Personne stockés dans le fichier monfichier.txt L’age n’est pas sérialisé à cause du transient A.Mazoul Programmation orienté objet Java 17 Programmation orienté objet en Java Les entrées/sorties Règles de sérialisation d'objets Si une classe implémente une interface Serializable, toutes ses sous-classes seront également Serializable. Si une classe a une référence dans une autre classe, toutes les références doivent être Serializable sinon le processus de sérialisation ne sera pas effectué. Dans ce cas, NotSerializableException est levée au moment de l'exécution. S'il y a des attributs statiques dans une classe, elles ne seront pas sérialisées car statique est la partie de la classe et non l'objet. Dans le cas d'un tableau ou d'une collection, tous les objets d'un tableau ou d'une collection doivent être Serializable. Si au moins un objet n'est pas Serializable , la sérialisation échouera. A.Mazoul Programmation orienté objet Java 18 A.Mazoul Réseaux informatiques Téléinformatique 19