Vous êtes sur la page 1sur 23

Langage JAVA

Prof: R. EL AYACHI
Département d’Informatique
Faculté des Sciences et Techniques
Béni Mellal

1
Chapitre 5: Fichiers

1. Introduction
2. Cycle d’utilisation d’un flux
3. Classe java.io.File
4. Streams de données binaires
5. Streams de caractères

2
Prof: R. EL AYACHI
1. Introduction
En java, les fichiers sont représentés par des objets particuliers
appelés en anglais (Stream). Ce mot signifie flot en français.
Les streams sont représentés dans des classes définies dans le
package java.io.
Il existe de nombreuses sortes de streams, qui peuvent être classés
selon plusieurs critères:
 Streams d’entrée (lecture) et streams de sortie (écriture)
 Streams de caractères (texte) et streams de données binaires
 Streams avec et sans tampon de données
…

3
Prof: R. EL AYACHI
1. Introduction
Un flux

• Un tuyau de transport séquentiel de données


• Unidirectionnel
• Il existe un flux par type de données à transporter (Image, Texte ou
Son)
Exemple:
Flux d’entrée Programme JAVA
Informations -------------
-------------
Informations -------------
Informations
Flux de sortie -------------

4
Prof: R. EL AYACHI
2. Cycle d’utilisation d’un flux

Le cycle d’utilisation d’un flux de données (lecture


ou écriture) est le suivant:
1. Ouverture du flux
2. Traitement (lecture des données ou écriture des
données)
3. Fermeture du flux

5
Prof: R. EL AYACHI
3. Classe java.io.File
File : classe modélisant un fichier (ou un
répertoire) de manière indépendante du système.
Cette classe fournit des méthodes pour lister les
répertoires, interroger des attributs de fichiers
(droits en lecture, en écriture), renommer ou
détruire des fichiers.
La déclaration et la création s’effectue de la façon
suivante:
File fich = new File(‘’Nom_fich.extension’’);
File rep = new File(‘’Nom_répertoire’’);
6
Prof: R. EL AYACHI
3. Classe java.io.File
Parmi les méthodes de java.io.File, on trouve:
• String getName(): retourne le nom du fichier
• String getParent(): retourne le nom du répertoire père
• boolean exists(): teste l’existence du fichier
• boolean canWrite(): teste la possibilité d’écriture
• boolean canRead(): teste la possibilité de lecture
• long length(): retourne la taille du fichier
• boolean mkdir() : créer un répertoire
• boolean CreateNewFile(): créer un fichier
• …etc
7
Prof: R. EL AYACHI
3. Classe java.io.File
Exemple1:
import java.io.File;
public class Main {
public static void main(String[] args) {
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()); }

8
Prof: R. EL AYACHI
4. Streams de données binaires
En java, les streams de données binaires dérivent des deux classes:
 java.io.InputStream pour les entrées (lecture)
 java.io.OutpuStream pour les sorties (écriture)
a. Ecriture dans un fichier de données binaires:
Les streams d’écriture pour les données binaires sont des sous
classes de la classe java.io.OutputStream:
- DataOutputStream: Ecriture séquentielle dans un fichier binaire
- BufferedOutputStream: Ecriture des données à l’aide d’un tampon
-…

9
Prof: R. EL AYACHI
4. Streams de données binaires
• La classe DataOutpuStream admet le constructeur:
DataOutpuStream(FileOutputStream out): créer un stream
d’écriture sur out
• Quelques méthodes de la classe DataOutputStream:

Méthode description
writeUTF() Ecriture d’une chaîne de caractères
writeInt() Ecriture d’un entier
writeFloat() Ecriture d’un réel de type Float
close() Fermeture du stream
…etc

10
Prof: R. EL AYACHI
4. Streams de données binaires
Exemple2:
import java.io.*;
class EcritureFichierBinaire
{ public static void main(String[] arg) throws IOException
{ File fich = new File(ˮtest.txtˮ);
DataOutputStream ecrivain;
ecrivain = new DataOutputStream (new FileOutputStream(fich));
ecrivain.writeUTF(ˮBonjourˮ);
ecrivain.writeInt(5);
ecrivain.writeChar(‘a’);
ecrivain.writeBoolean(false);
System.out.println(ecrivain.size()); // en octets
ecrivain.close(); }
}

11
Prof: R. EL AYACHI
4. Streams de données binaires
b. Lecture dans un fichier de données binaires:
Les streams d’entrée pour les données binaires sont des sous classes
de la classe java.io.InputStream:
- DataInputStream: Lecture séquentielle dans un fichier binaire
- BufferedInputStream: Lecture des données à l’aide d’un tampon
-…

La classe DataInputStream admet le constructeur:


DataInputStream(FileInputStream in): créer un stream d’entrée

12
Prof: R. EL AYACHI
4. Streams de données binaires
• Quelques méthodes de la classe DataInputStream:

Méthode description
readChar() Lire un caractère
readInt() Lire un entier
readFloat() Lire un réel de type Float
close() Fermer le stream d’entrée
… etc

13
Prof: R. EL AYACHI
4. Streams de données binaires
Exemple3:

import java.io.*;
class LireFichierBinaire
{
public static void main(String[] arg) throws IOException
{ File fich = new File(" test.txt");
DataInputStream lecture;
lecture = new DataInputStream (new FileInputStream(fich));
System.out.println(lecture.readChar());
System.out.println(lecture.readInt());
System.out.println(lecture.readBoolean());
lecture.close();
}
}

14
Prof: R. EL AYACHI
5. Streams de caractères
Les streams caractères sont conçus pour la lecture et l’écriture de texte. Ils
dérivent des deux classes abstraites: java.io.Reader pour les entrées et
java.io.Writer pour les sorties.
a. Ecriture dans un fichier texte:
Pour écrire dans un fichier texte, il faut utiliser les streams d’écriture qui
sont des sous-classes de la classe java.io.Writer, qui contient les sous
classes suivantes:
- FileWriter: sous-classe particulière de OutputStreamWriter utilisant la
taille de tampon par défaut.
- OutputStreamWriter: Convertir un stream de données binaires en
stream de caractères.
- BufferedWriter: Ecriture de caractères à l’aide d’un tampon (à la fin de
chaque ligne écrite, on utilise la méthode newLigne())
- PrintWriter: Ecrire des caractères formatés (la méthode println() permet
d’écrire sur le fichier texte).
15
Prof: R. EL AYACHI
5. Streams de caractères
Exemple4:
import java.io.*;
class EcrireFichierTexte
{ public static void main(String[] arg) throws IOException
{ File fich = new File(" test.txt");
PrintWriter ecrivain;
int i=10;
ecrivain = new PrintWriter (new FileOutputStream(fich));
ecrivain.println("Bonjour");
ecrivain.println(" Comment cela va-t-il?");
ecrivain.println(" On peut mettre des entiers");
ecrivain.println(i);
ecrivain.close();
}
}

16
Prof: R. EL AYACHI
5. Streams de caractères
Exemple5:
import java.io.*;
class EcrireFichierTexte
{ public static void main(String[] arg) throws IOException
{ File fich = new File(" test.txt");
FileWriter ecrivain = new FileWriter (fich);
ecrivain.write("Bonjour");
ecrivain.close();
}
}

17
Prof: R. EL AYACHI
5. Streams de caractères
b. Lecture dans un fichier texte:
Pour lire dans un fichier texte, on doit utiliser des sous-classes de la classe
java.io.Reader. Deux méthodes de cette classe sont abstraites:
- read(char[]cbuf,int off,int len): permet de lire len caractères et de les
placer dans le tableau cbuf, à partir de l’indice off.
- close(): ferme le stream.
Toutes les classes dérivées de Reader redéfinissent donc obligatoirement
ces deux méthodes.
- FileReader: sous-classe particulière de InputStreamReader utilisant une
taille de tampon par défaut.
- BufferedReader: lecture de caractères à l’aide d’un tampon.

18
Prof: R. EL AYACHI
5. Streams de caractères
Exemple 6:
Il s’agit de lire un fichier texte ligne par ligne et de reproduire
ce qui est lu directement à l’écran.
import java.io.*;
class LireLigne
{ public static void main(String[] arg) throws IOException {
BufferedReader LectureAvecBuffered=null;
String ligne;
try{ lectureAvecBuffered=new BufferedReader(new FileReader("NomFichier.txt"));
while((ligne=lectureAvecBuffered.readLine())!=null)
System.out.println(ligne);
lectureAvecBuffered.close();
}
catch(FileNotFounfException exc){
System.out.println(" Erreur d’ouverture");
}
}
}
19
Prof: R. EL AYACHI
5. Streams de caractères
Exemple 7: import javax.io.*;
class CopieTxt
Il s’agit de lire un fichier {
texte de nom public static void main(String[] arg) throws IOException
{
« original.txt » et copie FileReader entree=new FileReader("original.txt");
ce fichier dans un autre FileWriter sortie=new FileWriter(" copie.txt");
fichier de nom int c;

« copie.txt ». Nous allons while((c=entree.read())!=-1)


utiliser les streams sortie.write(c);
FileReader et FileWriter. entree.close();
sortie.close();
}
}

20
Prof: R. EL AYACHI
Résumé
Fichier

Stream Stream de
binaire caractères

java.io.OutputStream java.io.InputStream java.io.Writer java.io.Reader

FileWriter
DataOutputStream DataInputStream OutputStreamWriter FileReader
BufferedOutputStream BufferedInputStream BufferedWriter BufferedReader
…. …. PrintWriter ….
….

21
Prof: R. EL AYACHI
Stream de données binaires
DataInputStream

BufferedInputStream

DataOutputStream

BufferedOutputStream

22
Prof: R. EL AYACHI
Stream de caractères
FileReader

BufferedReader

FileWriter

BufferedWriter

PrintWriter

OutputStreamWriter
23
Prof: R. EL AYACHI

Vous aimerez peut-être aussi