Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parZoé Navarro Modifié depuis plus de 9 années
1
Cours 161 16 Les flux ou streams
2
Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire, disque, liaison réseau, clavier, …). En tout, une soixantaine de flux !!! On peut composer ses propres flux en combinant les flux de base : Pour l’accès aux fichiers, Pour gérer la bufferisation. Pour lire des données formatées, Pour traiter des fichiers ZIP, etc… On distingue : les flux d’entrée et les flux de sortie. les flux d’octets et les flux de char (Unicode)
3
Cours 163 Quatre classes abstraites de base ne peuvent être instanciées. InputStream et OutputStream Lecture, écriture d’un seul octet ou d’un flot d’octets. Reader et Writer lecture, écriture de texte Unicode.
4
Cours 164 D’autres classes permettent d’ajouter des propriétés Traitement de fichiers d’octets FileInputStream, FileOutputStream Mécanisme de bufferisation BufferedInputStream, BufferedOutputStream Traitement des types numériques DataInputStream, DataOuputStream Traitement de fichiers et construction d’Unicode FileReader, FileWriter Mécanisme de bufferisation BufferedReader, BufferedWriter Pour obtenir plusieurs propriétés il va falloir utiliser plusieurs constructeurs
5
Cours 165 Flux d’octets Flux de fichiers Flux bufferisés Flux de données Combinaisons de flux La classe File Flux de texte Unicode
6
Cours 166 Flux d’octets Lecture ou écriture d’un flot d’octets.
7
Cours 167 InputStream File InputStream FilterInputStream Buffered InputStream InflaterInputStream Flux d’octets Zip IinputStream Data InputStream
8
Cours 168 public abstract int read() throw IOException Lecture d’un seul octet, renvoie cet octet ou -1 int read (byte[ ] b)Lecture d’un tableau d’octets int read (byte[ ] b, int offset, int length) long skip (long n)Saute n octets int available()Nombre d’octets disponibles sans blocage void close()Ferme le flux d’entrée. void mark(int readLimit)Place un marqueur à la pos courante void reset()Revient au dernier marqueur boolean markSupported()true si le flux accepte le marquage java.io.InputStream (classe abstraite)
9
Cours 169 public abstract void write (int b) throw IOException Ecrit un octet de données public void write (byte[ ] b) public void write(byte[ ] b, int offset, int len) public void close()Vide le tampon et ferme le flux. public void flush()Vide le tampon (envoie les données vers la cible). java.io.OutputStream (classe abstraite)
10
Cours 1610 FileInputStream (String chemin)Crée un flux de fichier en entrée pour le fichier désigné par chemin. FileInputStream (File f)Le chemin est construit à partir de l’objet de type File FileOuputStream (String chemin)Attention, un fichier de même nom sera automatiquement détruit FileOuputStream (String chemin, boolean append) Si append == true, les données seront ajoutées à un fichier existant. FileOuputStream(File f)Le chemin est construit à partir de l’objet de type File Flux de Fichiers java.io.FileInputStream hérite de InputStream java.io.FileOutputStream hérite de OutputStream
11
Cours 1611 Lecture, écriture dans un flux de fichiers Possèdent des méthodes read et write qui redéfinissent les méthodes ancêtres. Donc mêmes noms, même signature. Il n’est pas nécessaire de les redécrire.
12
Cours 1612 Construction d’un flux d’octets pris dans un fichier Le flot est lu dans le fichier "employés.dat" du répertoire courant. FileInputStream fic = new FileInputStream("employés.dat"); Ou on construit un objet File : File f = new File("employés.dat"); puis : FileInputStream fic = new FileInputStream(f); Attention au caractère d’échappement \ Ecrire : "C:\\windows\\win.ini"
13
Cours 1613 BufferedInputStream (InputStream in)Crée un flux bufferisé, la taille du tampon est par défaut BufferedInputStream (InputStream in, int n)La taille du buffer est choisie par l’utilisateur BufferedOutputStream (OutputStream out) BufferedOutputStream (OutputStream out, int n) Flux d’octets bufferisés Ajout d’un mécanisme de bufferisation à un flux
14
Cours 1614 Flux de données Possèdent des méthodes pour lire ou écrire tous les types primitifs de base mais pas de méthodes pour accéder aux fichiers. DataInputStream (InputStream in) DataOuputStream (OutputStream out) readInt(), readShort(), redLong(), readFloat(), readDouble(), readChar(), readBoolean(), readUTF() writeChars(…), writeInt(…), …
15
Cours 1615 Construction d’un flux de données dans un fichier On construit un flux de fichier. On le transmet au flux de données que l’on crée. FileInputStream fic=new FileInputStream ("Employé.dat"); DataInputStream din = new DataInputStream (fic); double s = din.readDouble(); Il n’y a qu’un seul fichier créé. Par défaut les flux ne sont pas bufferisés.
16
Cours 1616 void writeInt (int i) void writeDouble (double d)…. void writeChars(String s) void writeChar (int v) Ecrit 2 octets par caractère int readInt () double readDouble () char readChar ()Lit deux octets et renvoie un char Quelques méthodes des flux de data
17
Cours 1617 Construction d’une lecture bufferisée : on passe un FileInputStream à un BufferedInputStream. new BufferedInputStream (new FileInputStream("Employé.dat")) Combinaison de flux
18
Cours 1618 Utilisation des méthodes de DataInputStream readInt()…. dans un fichier bufferisé. DataInputStream din = new DataInputStream (new BufferedInputStream (new FileInputStream(" Employé.dat") ) ) ; Lire des nombres dans un fichier ZIP ZipInputStream zin = new ZipInputStream ( new FileInputStream ("Employé.zip") ) ; DataInputStream din = new DataInputStream (zin);
19
Cours 1619 Exemple DataInputStream et DataOutputStream Ecriture puis relecture d’un fichier d’enregistrements composés : D’une chaîne de 10 caractères Unicode De trois float. Les enregistrements sont de longueur fixe. La chaîne est écrite en Unicode, on emploie writeChars(String s) puis readChar() à la relecture. Pour traiter des enreg de longueur variable, il faut mettre la longuer devant chaque élément variable.
20
Cours 1620 import java.io.*; class TestFicData { public static void main(String[] arg) { DataOutputStream fs = null; DataInputStream fe = null; try{ // Création du flux de sortie fs = new DataOutputStream(new FileOutputStream("essais.dat")); // Création de deux enreg Enreg e1 = new Enreg("Toto ", new float[] {10f, 12f, 12.5f}); Enreg e2 = new Enreg("Gaston ", new float[] {8.5f, 11f, 13.5f}); e1.écrireEnreg(fs); // Ecriture e2.écrireEnreg(fs); fs.close();// Fermeture } catch (IOException e){ }
21
Cours 1621 // RELECTURE try { fe = new DataInputStream( (new FileInputStream("essais.dat"))); Enreg et1 = new Enreg(); et1 = et1.lireEnreg(fe); Enreg et2 = new Enreg(); et2 = et2.lireEnreg(fe); fs.close ();// Fermeture } catch(IOException e){ } } }// Fin de la classe TestFicData
22
Cours 1622 class Enreg { private String nom = ""; // 10 char Longueur fixe private float [] note = new float[3]; Enreg (String nom, float[] note){ this.nom = nom; this.note = note; } Enreg (){ this("", new float[3]); } public String toString (){ return nom + " " + note[0] + " "+ note[1] + " "+ note[2]; } …..
23
Cours 1623 Suitevoid écrireEnreg (DataOutputStream fs) { try{ fs.writeChars (nom);// Ecrit la chaîne de 10 char for(int i = 0; i < note.length; i++) fs.writeFloat (note[i]); } catch(IOException e) { System.out.println(e);} } Enreg lireEnreg (DataInputStream fe) { String s = ""; try { for(int i = 0; i < 10; i++ ) s += fe.readChar (); nom = s; for(int i = 0; i < 3 ; i++ ) note[i] = fe.readFloat (); } catch (IOException ex) { System.out.println("lireEnreg " + ex);} return this ; } }// Fin de la classe Enreg
24
Cours 1624 Introduction d’une bufferisation dans cet exemple Il suffit de remplacer le constructeur par fe = new DataInputStream ( new BufferedInputStream ( new FileInputStream ("essais.dat") ) );
25
Cours 1625 La classe File Encapsule les fonctionnalités nécessaires pour la gestion de fichiers. File(String pathName) boolean delete() boolean exists() True si le fichier ou répertoire existe. String getPath() long length() boolean mkdir() Make Dir boolean renameTo(File dest)
26
Cours 1626 boolean canRead() boolean canWrite() String getAbsolutePath() String getName() boolean isDirectory() boolean isFile() boolean isHidden() long lastModified() long length() boolean setReadOnly() Renvoie true si l’opération a réussi.
27
Cours 1627 Flux de texte Lecture écriture de texte Unicode
28
Cours 1628 Flux de texte Unicode Codage du Système d’exploitation Windows, Mac … Reader Produit de l’Unicode Writer Produit du code du système
29
Cours 1629 Reader et Writer Classes abstraites Un reader lit des caractères codés selon le système d’exploitation et restitue du texte Unicode. Un writer fait la transformation inverse. Le code du système d’exploitation peut être choisi. Les méthodes read ou write ne savent traiter qu’un seul caractère Unicode ou un tableau de caractères. Le traitement de fichier, le mécanisme de bufferisation seront ajoutés par des constructeurs spécifiques.
30
Cours 1630 Reader Buffered Reader FilterReader LineNumber Reader Flux de texte File Reader InputStream Reader
31
Cours 1631
32
Cours 1632 Fichiers Random
33
Cours 1633 La classe Console
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.