0-M02 – Introduction ` a la programmation
Cours n°6 Fichiers et flux de donn´ees
Camille Coti
camille.coti@iutv.univ-paris13.fr
IUT de Villetaneuse, d´epartement R&T
2011 – 2012
Flux
D´efinition
Unfluxest une s´equence d’informations.
Il peut ˆetre en lecture ou en ´ecriture
Ces informations peuvent ˆetre des octets (binaire) ou des caract`eres En Java :
Unflux d’entr´eeest caract´eris´e par unesource(entr´ee) `a partir de laquelle onlitdes informations
Unflux de sortieest caract´eris´e par unedestination(sortie) sur laquelle on´ecritdes informations
Exemples : fichier, socket vers une machine distante, p´eriph´erique...
Flux d’octets: 1 octet = 8 bits
Repr´esente des donn´ees binaires input stream: flux d’entr´ee d’octets
output stream: flux de sortie
Flux de caract`eres:
Caract`eres unicodes = 16 bits Repr´esente des textes (lisibles) reader: flux d’entr´ee de caract`eres
writer: flux de sortie de
Utilisation d’un flux
Op´erations obligatoires sur un flux :
1 Cr´eer et ouvrir le flux
2 Lire (flux d’entr´ee) ou ´ecrire (flux de sortie) les informations `a partir du (ou sur le) flux
3 Fermer le flux
Classes disponibles : Flux binaires
FileInputStream FileOutputStream DataInputStream DataOutputStream
Flux de caract`eres FileWriter FileReader PrintWriter
Ecriture dans un fichier (caract` ´ eres)
Les flux de sortie en mode caract`eresh´eritent de la classe abstraite Writer Exemple : FileWriter
M´ethodes :
public abstract void close() throws IOException Ferme le flux de sortie courant
public void write( int c ) throws IOException
´Ecrit le caract`erecsur le flux de sortie courant
public void write( char[] tab ) throws IOException
´Ecrit le tableau de caract`erestabsur le flux de sortie courant public void write( String s ) throws IOException
´Ecrit la chaˆıne de caract`eresssur le flux de sortie courant
Remarque : ces m´ethodes l`event une exception du typeIOException
Ecriture dans un fichier (caract` ´ eres) : exemple
1 i m p o r t j a v a . i o .∗; 2
3 p u b l i c c l a s s t e x t F i l e W r i t e r { 4
5 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 6 F i l e W r i t e r fw ;
7
8 t r y{
9 fw = new F i l e W r i t e r ( ” e s s a i . t x t ” ) ; 10 fw . w r i t e ( ” t o t o ” ) ;
11 fw . c l o s e ( ) ;
12 }
13 c a t c h( I O E x c e p t i o n e ) {
14 Sys tem . o u t . p r i n t l n ( e ) ;
15 fw = n u l l;
16 }
17 }
18 19 }
Lecture dans un fichier (caract` eres)
Les flux d’entr´ee en mode caract`eresh´eritent de la classe abstraite Reader Exemple : FileReader
M´ethodes :
public abstract void close() throws IOException Ferme le flux d’entr´ee courant
public int read( ) throws IOException
Lit un caract`ere depuis le flux d’entr´ee courant. Retourne le caract`ere lu ou -1 si rien n’a pu ˆetre lu
public int read( char[] tab ) throws IOException tabdoit ˆetre initialis´e avec une longueur non nulletab.length
Tente de liretab.lengthcaract`eres depuis le flux d’entr´ee courant et les stocke danstab
Retourne le nombre de caract`eres r´eellement lus ou -1 si rien n’a pu ˆetre lu
Remarque : ces m´ethodes l`event une exception du typeIOException
Lecture dans un fichier (caract` eres) : exemple
1 i m p o r t j a v a . i o .∗;
2 p u b l i c c l a s s t e x t F i l e R e a d e r {
3 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 4 F i l e R e a d e r f r ;
5 i n t c ;
6 t r y{
7 f r = new F i l e R e a d e r ( ” e s s a i . t x t ” ) ;
8 c = f r . r e a d ( ) ;
9 w h i l e( c != −1 ) {
10 Syste m . o u t . p r i n t ( (c h a r) c ) ;
11 c = f r . r e a d ( ) ;
12 }
13 f r . c l o s e ( ) ;
14 }
15 c a t c h( I O E x c e p t i o n e ) {
16 Sys tem . o u t . p r i n t l n ( e ) ;
17 f r = n u l l;
18 }
19 }
20 }
Ecriture dans un fichier (binaire) ´
Les flux de sortie en mode binaireh´eritent de la classe abstraite OutputStream
Exemple : FileOutputStream
M´ethodes :
public abstract void close() throws IOException Ferme le flux de sortie courant
public void write( int b ) throws IOException
´Ecrit l’octet le poid faible deben tant qu’octet sur le flux de sortie courant public void write( byte[] tab ) throws IOException
´Ecrit les octets contenus dans le tableautabsur le flux de sortie courant
Remarque : ces m´ethodes l`event une exception du typeIOException
Ecriture dans un fichier (binaire) : exemple ´
1 i m p o r t j a v a . i o .∗; 2
3 p u b l i c c l a s s b i n F i l e O u t p u t S t r e a m { 4
5 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 6 F i l e O u t p u t S t r e a m f o ;
7 b y t e[ ] t a b = {1 , 2 , 4};
8
9 t r y {
10 f o = new F i l e O u t p u t S t r e a m ( ” e s s a i 2 . t x t ” ) ;
11 f o . w r i t e ( t a b ) ;
12 f o . c l o s e ( ) ;
13 }
14 c a t c h( I O E x c e p t i o n e ) {
15 Sys tem . o u t . p r i n t l n ( e ) ;
16 f o = n u l l;
17 }
18 }
19 20 }
Ecriture dans un fichier (binaire) : classe avanc´ ´ ee
Les m´ethodes de la classe FileOutputStream sont rudimentaires M´ethodes plus avanc´ees avec la classe DataOutputStream
Le constructeur deDataOutputStreamprend en param`etre un objet de la classeFileOutputStream
M´ethodes :
public int size() throws IOException Retourne le nombre d’octets ´ecrits sur le flux
public void writeBoolean( boolean b ) throws IOException
´Ecrit le bool´eenben tant qu’octet sur le flux de sortie courant public void writeInt( int i ) throws IOException
´Ecrit l’entierien tant qu’une s´equence de 4 octets sur le flux de sortie courant (octet de poids fort en premier)
Et ainsi de suite pour tous les types primitifs de Java : writeLong( ), writeShort(),writeChar(), etc
Remarque : ces m´ethodes l`event une exception du typeIOException
Ecriture avanc´ ´ ee dans un fichier (binaire) : exemple
1 i m p o r t j a v a . i o .∗; 2
3 p u b l i c c l a s s b i n D a t a O u t p u t S t r e a m {
4 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 5 F i l e O u t p u t S t r e a m f o ;
6 D a t a O u t p u t S t r e a m d o s ;
7 t r y {
8 f o = new F i l e O u t p u t S t r e a m ( ” e s s a i 2 . t x t ” ) ; 9 d o s = new D a t a O u t p u t S t r e a m ( f o ) ;
10 d o s . w r i t e C h a r s ( ” t o t o t i t i t a t a ” ) ; 11 d o s . w r i t e I n t ( 42 ) ;
12 d o s . c l o s e ( ) ;
13 }
14 c a t c h( I O E x c e p t i o n e ) {
15 Sys tem . o u t . p r i n t l n ( e ) ;
16 f o = n u l l;
17 d o s = n u l l;
18 }
19 }
20 }
Lecture dans un fichier (binaire)
Les flux d’entr´ee en mode binaireh´eritent de la classe abstraite InputStream Exemple : FileInputStream
M´ethodes :
public abstract void close() throws IOException Ferme le flux d’entr´ee courant
public abstract int read( ) throws IOException
Lit un caract`ere depuis le flux d’entr´ee courant. Retourne le caract`ere lu ou -1 si rien n’a pu ˆetre lu
public int read( char[] tab ) throws IOException tabdoit ˆetre initialis´e avec une longueur non nulletab.length
Tente de liretab.lengthcaract`eres depuis le flux d’entr´ee courant et les stocke danstab
Retourne le nombre de caract`eres r´eellement lus ou -1 si rien n’a pu ˆetre lu
Remarque : ces m´ethodes l`event une exception du typeIOException
Lecture dans un fichier (binaire) : classe avanc´ ee
Comme pour FileOutputStream, les m´ethodes de la classe FileInputStream sont rudimentaires
M´ethodes plus avanc´ees avec la classe DataInputStream
Le constructeur deDataInputStreamprend en param`etre un objet de la classeFileInputStream
M´ethodes :
public int size() throws IOException Retourne le nombre d’octets ´ecrits sur le flux
public boolean readBoolean( ) throws IOException public int readInt( ) throws IOException
public char readChar( ) throws IOException
Et ainsi de suite pour tous les types primitifs de Java : writeLong( ), writeShort(),writeChar(), etc
Remarque : ces m´ethodes l`event une exception du typeIOException