Entrées / Sorties.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Cours n° 2 Les entrées-sorties Biliothèque C++ (iostream) –
Sérialisation des objets
Le mécanisme des exceptions
Flots et Sérialisation des objets
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
(Classes prédéfinies – API Java)
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Les fonctions en Java Partie I Le type void. Dans cette rapide présentation, je vais expliquer :.à quoi servent les fonctions.à quoi faut-il penser avant.
FLSI602 Génie Informatique et Réseaux
Les entrées /sorties en Java François Bonneville
Système d’Exploitation
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
COURS DE PROGRAMMATION ORIENTEE OBJET :
UNIVERSITE CHOUAIB DOUKKALI Département des mathématiques
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Présentation de la séquence de cours sur les interactions HTML-javascript Laure Walser, 11 juin 2010.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Accès aux données généralisé SQL est presque une solution! Le problème: Le SQL n'est pas une langue complète, et doit être intégré dans un langage de programmation.
Principes de programmation (suite)
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Langage Oriente Objet Cours 2.
Les fichiers binaires en C++
Structures de données IFT-2000
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
CSI 1502 Principes fondamentaux de conception de logiciels
Une introduction à Java
Les fichiers texte en C++
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
La librairie assert.h.
Informatique et science du numérique
Chapitre IX Gestion de flux.
J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~
4 Introduction des objets. Les chaînes et tableaux
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
Cours 1 1 Java. Cours 1 2 Plan général 1.Introduction 2.Les types primitifs, évaluation d’expressions 3.Instructions for, if…. 4.Introduction de l’objet,
11/04/ L'héritage Cours 7 Cours 7.
Cours Les flux ou streams. Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire,
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
12/04/ Les exceptions Cours 11 Cours 11.
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Strings et Tableaux en Java
Les sockets.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
1 Chapitre III (~70 transparents) Compléments. 2 Au sommaire de ce chapitre 1. Les fichiers Les classes utilitaires
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Fichier et Stream d’Entrée-Sortie IFT1025, Programmation 2 Jian-Yun Nie Version court par Douglas Eck; Version
LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
Généricité.
LES CLASSES ET LES OBJETS
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Informatique 2A Langage C 4ème séance
Transcription de la présentation:

Entrées / Sorties

introduction JAVA gère les entrées/sortie en utilisant des objets appelés streams (flots) un stream est un flot de données entre le programme java et un container de données, appelé sink (évier) un sink peut être une console (clavier/écran), un fichier, le réseau…

stream stream programme JAVA sink

Types de stream Il existe de multiples streams Ils peuvent être classés par sens du flot entrée, sortie type de données manipulées données binaires, données caractères nature de la manipulation des données communication, traitement

Chaînage de streams L'intérêt des streams c'est qu'ils peuvent être chaînés un stream de communication peut être enchaîné avec un stream de traitement permettant de mettre en œuvre le traitement sur flot exemple gestion de tampon, compression, sécurité, intégrité, sérialisation… L'enchaînement se fait par la création d'objet stream prenant un autre stream comme paramètre

stream programme JAVA sink

Streams de caractères

Création d'un fichier texte Streams de caractères Streams de communication Streams de sortie Création d'un fichier texte FileWriter fw = new FileWriter("data.txt" ); Cette instruction écrase systématiquement le fichier data.txt (s'il existe) Il serait souhaitable de vérifier l'existence du fichier au préalable pour cela on utilise un objet File

File Classe permettant de créer des objets qui décrivent des fichiers Streams de caractères Streams de communication Streams de sortie File Classe permettant de créer des objets qui décrivent des fichiers File f = new File("Data.txt"); Attention, cette instruction ne crée pas le fichier data.txt. Elle permet juste d'accéder à ses informations systèmes (existence, taille…) Ainsi, on peut créer le fichier FileWriter fw = new FileWriter(f);

Opération sur un FileWriter Streams de caractères Streams de communication Streams de sortie Opération sur un FileWriter Ecriture fw.write(int) Fermeture fw.close();

Exemple import java.io.*; public class Fichier { public static void main(String [] args) throws IOException { FileWriter fw = new FileWriter("Fichier.txt"); for( int i=0; i<args.length; i++){ fw.write(args[i]); fw.write(‘\n’); } fw.close();

Ecrire des voitures class Voiture { private float avg, avd, arg, ard; Voiture (float x, float y, float u, float v){ avg = x; avd = y; arg = u; ard = v; } public String toString(){ return avg + " : " + avd + " : " + arg + " : " + ard ;

Exercice Ecrire un programme qui crée des objets de type Voiture et écrit leurs représentations String dans un fichier texte Ecrire un programme qui génère un nombre donné de mots de passe qu'il stocke dans un fichier. Il s'exécute java Password n m fichier n est le nombre de mots m la longueur du mot fichier le fichier de stockage

Utilisation d'un tampon Streams de caractères Streams de traitement Streams de sortie Utilisation d'un tampon L'accès au disque est plus lent que l'accès à la mémoire L'écriture serait plus rapide en utilisant un tampon (buffer) Pour cela, on enveloppe le stream FileWriter dans un stream BufferedWriter

BufferedWriter Streams de caractères Streams de traitement Streams de sortie BufferedWriter programme JAVA Fichier BufferedWriter FileWriter

Créer un stream de sortie bufférisé Streams de caractères Streams de traitement Streams de sortie Créer un stream de sortie bufférisé File f = new File("donnees.txt"); FileWriter fw = new FileWriter (f); BufferedWriter b = new BufferedWriter(fw); Ecriture plus compacte BufferedWriter b = new BufferedWriter(new FileWriter (f));

Manipulation d'un BufferedWriter Streams de caractères Streams de traitement Streams de sortie Manipulation d'un BufferedWriter Ecriture b.write(String); b.write(char[]); b.write(int ); Fermeture b.close();

Exercice Modifier les programmes précédents pour utiliser un buffer

Exemple import java.io.*; public class Fichier { public static void main(String [] args) throws IOException { FileWriter fw = new FileWriter("Fichier.txt"); BufferedWriter bw = new BufferedWriter (fw); for( int i=0; i<args.length; i++){ bw.write(args[i]); bw.write("\n"); } bw.close();

Streams de caractères Streams de traitement Streams de sortie Sortie formatée Les streams FileWriter et BufferedWriter permettent d'écrire des caractères (unicode) ou des chaînes de caractères Le programmeur souvent souhaite écrire des données formatées (int, long, float…) PrintWriter est un stream qui permet cela on enveloppe le BufferedWriter dans un PrintWriter

PrintWriter Streams de caractères Streams de traitement Streams de sortie PrintWriter programme JAVA Fichier PrintWriter BufferedWriter FileWriter

Créer un fichier de sortie formatée Streams de caractères Streams de traitement Streams de sortie Créer un fichier de sortie formatée File f = new File("donnees.txt"); FileWriter fw = new FileWriter (f); BufferedWriter b = new BufferedWriter(fw); PrintWriter p = new PrintWriter (b, true); Ecriture plus compacte PrintWriter p = new PrintWriter ( new BufferedWriter( new FileWriter (f) ), true );

Ecriture Ecriture Fermeture Streams de caractères Streams de traitement Streams de sortie Ecriture Ecriture p.print(int); p.print(float); p.print(boolean); p.print(String)… p.println(int); p.println(float); p.println(boolean); p.println(String); p.write(String); p.write(int); Fermeture p.close();

Exemple import java.io.*; public class Fichier { public static void main(String [] args) throws IOException { FileWriter fw = new FileWriter("Fichier.txt"); BufferedWriter bw = new BufferedWriter (fw); PrintWriter pw = new PrintWriter (bw, true); for( int i=0; i<10; i++){ pw.println(i); } pw.close();

Récapitulatif des streams sortie de caractères Streams de caractères Streams de sortie Récapitulatif des streams sortie de caractères streams de communication PipedWriter connexion entre une sortie et une entrée CharArrayWriter écriture avec un tampon indexé StringWriter écriture dans une chaîne FileWriter sous-classe de OutputStreamWriter avec tampon et encodage par défaut streams de traitement OutputStreamWriter convertit un stream binaire en caractère FilterWriter (classe abstraite) parent de classes de traitement (java ne vient avec aucune sous-classe) BufferedWriter écriture de caractères avec tampon PrintWriter écriture de caractères formatés

Ouverture d'un fichier texte Streams de caractères Streams de communication Streams d'entrée Ouverture d'un fichier texte FileReader fr = new FileReader("data.txt" ); Cette instruction suppose que le fichier existe. Une erreur se produira si le fichier n'existe pas. Il serait souhaitable de vérifier l'existence du fichier au préalable pour cela on utilise un objet File

File File f = new File("data.txt"); Streams de caractères Streams de communication Streams d'entrée File File f = new File("data.txt"); Attention, cette instruction n'ouvre pas le fichier data.txt. Elle permet juste d'accéder à ses informations systèmes (existence, taille…) Ainsi, on peut créer le stream vers le fichier FileReader fr = new FileReader(f);

Opération sur un FileReader Streams de caractères Streams de communication Streams d'entrée Opération sur un FileReader Lecture int n = fr.read( ); //lit un caractère Fermeture fr.close();

Utilisation d'un tampon Streams de caractères Streams de traitement Streams d'entrée Utilisation d'un tampon On accélère la lecture en utilisant un tampon Pour cela, on enveloppe le stream FileReader dans un stream BufferedReader

BufferedReader Streams de caractères Streams de traitement Streams d'entrée BufferedReader programme JAVA Fichier BufferedReader FileReader

Créer un stream d'entrée bufférisé Streams de caractères Streams de traitement Streams d'entrée Créer un stream d'entrée bufférisé File f = new File("data.txt"); FileReader fr = new FileReader (f); BufferedReader br = new BufferedReader(fr); Ecriture plus compacte BufferedReader br = new BufferedReader(new FileReader (f));

Manipulation d'un BufferedReader Streams de caractères Streams de traitement Streams d'entrée Manipulation d'un BufferedReader Ecriture int c = br.read(); String s = br.readLine(); Fermeture br.close();

Récapitulatif des streams d'entrée de caractères Streams de caractères Streams d'entrée Récapitulatif des streams d'entrée de caractères streams de communication PipedReader connexion entre une sortie et une entrée CharArrayReader lecture avec un tampon indexé StringReader lire à partir d'une chaîne FileReader sous-classe de InputStreamReader avec tampon et encodage par défaut streams de traitement InputStreamReader convertit un stream binaire en caractère FilterReader (classe abstraite) PushBackReader : lecture avec revoie du dernier caractère lu… BufferedReader lit des caractères avec tampon LineNumberReader : lire des caractères en comptant les lignes

Exemple import java.io.*; public class CopieTXT { public static void main(String [] args) throws IOException { if(args.length < 2){ System.out.println("Usage : java CopyText <fichierSource> <fichierDestination>."); System.exit(1); } File f = new File (args[0]); if(!f.exists()){ System.out.println("Le fichier " + args[0] + " n'existe pas."); File g = new File (args[1]); if(g.exists()){ System.out.println("Le fichier " + args[1] + " existe déjà."); System.out.println("Souhaitez-vous l'écraser (O/N)? "); char c = Clavier.lireCaractere(); if(c != 'N' && c != 'n') System.exist(1); BufferedReader bf = new BufferedReader(new FileReader(f)); BufferedWriter bw = new BufferedWriter(new FileWriter(g)); String s; while((s=bf.readLine()) != null){ bw.write(s); bw.newLine(); bf.close(); bw.close();

Exercice Lire le fichier de voitures et recréer les objets Voiture

Récapitulatif des streams sortie de caractères Streams de caractères Streams de sortie Récapitulatif des streams sortie de caractères streams de communication PipedWriter connexion entre une sortie et une entrée CharArrayWriter écriture avec un tampon indexé StringWriter écriture dans une chaîne FileWriter sous-classe de OutputStreamWriter avec tampon et encodage par défaut streams de traitement OutputStreamWriter convertit un stream binaire en caractère FilterWriter (classe abstraite) parent de classes de traitement (java ne vient avec aucune sous-classe) BufferedWriter écriture de caractères avec tampon PrintWriter écriture de caractères formatés

Récapitulatif des streams d'entrée de caractères Streams de caractères Streams d'entrée Récapitulatif des streams d'entrée de caractères streams de communication PipedReader connexion entre une sortie et une entrée CharArrayReader lecture avec un tampon indexé StringReader lire à partir d'une chaîne FileReader sous-classe de InputStreamReader avec tampon et encodage par défaut streams de traitement InputStreamReader convertit un stream binaire en caractère FilterReader (classe abstraite) PushBackReader : lecture avec revoie du dernier caractère lu… BufferedReader lit des caractères avec tampon LineNumberReader : lire des caractères en comptant les lignes

Streams d'octets

Récapitulatif des streams sortie d'octets Streams d'octets Streams de sortie Récapitulatif des streams sortie d'octets streams de communication FileOutputStream écriture séquentielle d'octets dans un fichier PipedOutputStream connecter un PipedInputSTream et un stream de sortie ByteArrayOutputStream écriture d'octets avec un tampon indexé streams de traitement FilterOutputStream BufferedOutputStream écrit avec un tampon CkeckedOutputStream écrit et vérifie l'intégrité DataOutputStream écrit au format des types java DigestOutputStream écriture avec création d'une table de hachage permettant de vérifier l'intégrité avec DigestInputStream DeflaterOutputStream (écriture avec compression) GZIPOutputStream ZipOutputStream JarOutputStream PrintStream écriture avec conversion en octets (en fonction du système hôte) ObjectOutputStream écrit un objet sérialisé

Récapitulatif des streams d'entrée d'octets Streams d'octets Streams d'entrée Récapitulatif des streams d'entrée d'octets streams de communication FileInputStream lecture séquentielle d'octets dans un fichier PipedInputStream connecter un stream d'entrée à PipedOutputSTream ByteArrayInputStream lecture d'octets avec un tampon indexé streams de traitement FilterInputStream BufferedInputStream lit avec un tampon CkeckedInputStream (java.util.zip) lit et vérifie l'intégrité DataInputStream lit au format des types java DigestInputStream (java.security) lecture et vérification à l'aide de table de hachage créée par DigestOutputStream InflaterInputStream (lecture avec décompression) GZIPInputStream ZipInputStream JarInputStream ProgressMonitorInputStream (java.swing) lecture et affichage de barre de progression PushBackInputStream SequenceInputStream ObjectInputStream lit un objet sérialisé

Lecture d'un fichier binaire Streams d'octets Streams d'entrée Lecture d'un fichier binaire Stream simple FileInputStream f = new FileInputStream("image.gif"); lecture avec f.read(); Stream avec tampon BufferedInputStream bis = new BufferedInputStream(f); lecture avec bis.read(); Stream avec lecture de primitifs java DataInputStream in = new DataInputStream(bis); lecture avec readBoolean, readByte, readChar, readDouble, readFloat, readInt, readLong, readShort

Ecriture d'un fichier binaire Streams de caractères Streams d'octets Streams d'entrée Ecriture d'un fichier binaire Stream simple FileOutputStream f = new FileOutputStream("image.gif"); écriture avec f.write(); Stream avec tampon BufferedOutputStream bis = new BufferedOutputStream(f); écriture avec bis.write(); Stream avec écriture de primitifs java DataOutputStream out = new DataOutputStream(bis); écriture avec writeBoolean, writeByte, writeChar, writeDouble, writeFloat, writeInt, writeLong, writeShort

Exemple import java.io.*; class CopyBinaire { public static void main ( String[] args ) { DataInputStream in; DataOutputStream out; if ( args.length != 2) { System.out.println("java Copier source destination"); return; } File inF = new File( args[0] ); File ouF = new File( args[1] ); if ( !inF.exists() ) { System.out.println( args[0] + " n'existe pas"); return; } if (ouF.exists() ) { System.out.println( args[1] + " existe deja"); return; } try { in = new DataInputStream( new BufferedInputStream( new FileInputStream( inF ))); out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream( ouF ))); int b; while ( true ) { b = in.readUnsignedByte() ; out.writeByte( b ) ; } } catch ( EOFException eof ) { out.close(); in.close(); return; } catch ( FileNotFoundException fnp ) { System.out.println("Probleme ouvrire fichier" ); } catch ( IOException esx ) { System.out.println("Probleme d'E/S" ); }

public int miroir (int b){ int r = 0x0; for(int i=7;i>=0;i--){ int d = (b >> i) & 0x1; int e = d << (7-i) ; r = r | e; } return r;

Ecriture à l'écran La classe java.lang.System fournit un objet (out) de type PrintStream représentant la sortie standard Il peut être utilisé directement pour afficher des caractères à l'écran System.out.print() System.out.println()

Lecture au Clavier La classe java.lang.System fournit un objet (in) de type InputStream représentant l'entrée standard InputStream est une classe abstraite, super-classe de toutes les classes de streams d'entrée binaire On peut convertir cet objet en stream d'entrée de caractères. BufferedReader stdin = new BufferedReader ( new InputStreamReader( System.in) ); Ainsi on peut lire des caractères depuis le clavier en utilisant les méthodes de BufferedReader

Exercices Ecrire un programme qui lit deux nombres au clavier et qui les imprime dans l'ordre à l'écran. Ne pas utiliser le paquet io.jar Créer un codeur / décodeur de fichiers binaires qui inverse chaque octet. Ecrire un programme JAVA qui compresse/décompresse un fichier ZIP