Vous êtes sur la page 1sur 26

FORMATION JAVA

Partie III:  Gestion des Flux d’Entrée ‐ Sortie

Dr. GOORE BI Tra /       goore@inphb.edu.ci        /       (+225) 07 90 39 73 
Gestion des flux d’entrée ‐ sortie

 Le principe des entrée/sorties 
 Il est basé sur le concept de flot ou flux (streams) 
 Un flux  modélise une  source (flot d’entrée) ou un réceptacle 
(flot de sortie) d’une suite de données. 
 Une source ou une destination de données peut être :
• Un tableau
• Une chaîne de caractère
• Un fichier
• Socket pour échanger des données sur un réseau
• Données de grandes tailles dans une base de  données telles que les 
images 
• Une adresse Web
• Un autre flot
• Etc.

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 2
Gestion des flux d’entrée ‐ sortie

Java distingue deux classes de flots de données :
 Les flots d’octets 
• Ils servent à lire ou écrire des octets « bruts » ou binaires
• Ils sont modélisés par la hiérarchie de classe  ayant pour 
classes de base : InputStream et OutputStream.
 Les flots de caractères
• Ils  servent à lire ou écrire des données  qui représentent 
des caractères lisibles (caractères Ascii). 
• Ils sont modélisés par la hiérarchie de classe: Reader et
Writer

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 3
Les flux d’entrée d’octet

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 4
Les flux d’entrée d’octet

 Les classes de décoration (filter)
 Elles permettent d’ajouter des fonctionnalités supplémentaires à un 
flux de base:
• Utilisation d’un buffer pour optimiser les opérations de lecture et d’écriture
• Codage ou décodage des données manipulées
• Compression ou décompression de ces données
• etc…
 Mise en œuvre des classes de décoration
 Un filtre encapsule un autre flot de telle sorte que les données lues 
dans un filtre proviennent du flot enveloppé.  
 L’association d’un filtre à un flux de base se fait au moment de la 
création du filtre. 
 Le flux de base est alors le ou l’un des arguments du constructeur du 
flux filtrant.

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 5
Les flux d’entrée d’octet

 Les classes décoration (filter)
 Exemple

DataInputStream entree = new DataInputStream(System.in);
int entier = entree.readInt();
String chaine = entrée.readLine();

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 6
Les flux d’entrée d’octet

 La classe filtre DataInputStream
public class DataInputStream extends FilterInputStream
implements DataInput {
public final byte readByte() throws IOException
public final short readShort() throws IOException
public final char readChar() throws IOException
public final int readInt() throws IOException
public final long readLong() throws IOException
public final float readFloat() throws IOException
public final double readDouble() throws IOException
public final String readLine() throws IOException public 
DataInputStream(InputStream in)
}
Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 7
Les flux d’entrée d’octet

 Exemple: Saisie de nombre au clavier
import java.io.*;
class Clavier {
public static void main(String[] args) {
DataInputStream entree = new DataInputStream(System.in);
try {
System.out.println("Entrez un entier");
int entier = entree.readInt();
System.out.println("Entrez une chaine");
String chaine = entree.readLine();
}
catch(IOException e){
System.out.println(e);
}
}
}

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 8
Les flux de sortie d’octet

 La classe PrintStream
 Destinée à la sortie des données sous forme de texte 
à travers ses méthodes « print » et « println ».
 Filtre pouvant être associé à un autre filtre ou flux de 
base pour exploiter les méthodes précédentes
 Exemple

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 9
Les flux de sortie d’octet

 La classe PrintStream
 Principales méthodes
public class PrintStream extends FilterOutputStream {
public PrintfStream(OutputStream out)
public PrintfStream(OutputStream out, boolean autoflush)
public boolean checkError()
public void close()
public void print(Object obj)
public synchronized void print(String s)
public synchronized void print(char [ ] s)
public void print(char c)
public void print(int i)
public void print(long  l)
public void print(float f)

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 10
Les flux de sortie d’octet
 La classe PrintStream
 Principales méthodes
public void print(double d)
public void print(boolean b)
public void println()
public synchronized void println(Object obj)
public synchronized void println(String s)
public synchronized void println(char [ ] s)
public synchronized void println(char c)
public synchronized void println(int i)
public synchronized void println(long  l)
public synchronized void println(float f)
public synchronized void println(double d)
public synchronized void println(boolean b)
public void write(int b) throws IOException
public void write(byte[]b,int début,int nbre) throws IOException
};

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 11
Les flux de sortie d’octet
Exercice 1
Ecrire les instructions qui permettent d’associer un PrintStream à un
fichier d’octet en écriture
FileOutputStream fos = new FileOutputStream(‘’sortie’’);
PrintStream ps = new PrintStream (fos);
Exercice 2
Ecrire les instructions qui permettent d’écrire une ligne de texte dans un
fichier en utilisant la réponse de la question précédente
ps.println(‘’ligne ecrite dans le fichier’’);
Exercice 2
Ecrire et tester un programme qui lit des chaines de caractère au clavier
et les écrit dans un fichier. La saisie s’arrête lorsqu’on rentre une ligne
vide. La méthode equals(String s) de la classe String permet de
comparer une chaine de caractère à une autre.
Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 12
Les flux de sortie d’octet

import java.io.*;
while( !ligne.equals("") )
class TestPrintStream {
{
public static void main(String[] args) {
sortie.println(ligne);
PrintStream sortie = null;
System.out.println("Entrer un texte");
ligne = dis.readLine();
try {
}
sortie = new PrintStream(newFileOutputStream("sortie"));
DataInputStream dis = new DataInputStream(System.in);
}
catch(FileNotFoundException e){
System.out.println("Entrer un texte");
System.out.println(e);
String ligne == dis.readLine();
}
catch(IOException e){};
sortie.close();
}
}

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 13
Les flux d’entrée de caractères

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 14
Les flux d’entrée de caractères

 La classe BufferedReader
 Contructeur
• BufferedReader(Reader in)
• BugfferReader(Reader in, int sz)
 Méthode importantes
• read() throws exception 
– lecture d’un caractère
• String readLine():
– lecture d’une ligne de texte

 La classe InputStreamReader
 Flux de caractères qui puise ses données à partir d’un flux d’octets. 
 Elle sert de pont entre un flot de caractère et un flot d’octets 
 Elle permet lire des flots d’octets et de les convertit en flots de 
caractère. 
Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 15
Les flux d’entrée de caractères

 La classe InputStreamReader
System.in InputStream

Incompatibilité Reader rd = InputStreamReader (InputStream)


de type
Conversion du InputStream en
Reader
BufferedReader( Reader rd) Reader
String readLine()

Compatibilté de type

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 16
Les flux d’entrée de caractères

 La classe InputStreamReader
 Exemple 1
Reader reader = new InputStreamReader(System.in);
BufferedReader clavier = new BufferedReader(reader);
System.out.print("Entrez une ligne de texte:");
String line = clavier.readLine();
System.out.println("La ligne saisi est :" + line);

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 17
Les flux d’entrée de caractères

 La classe InputStreamReader
 Exemple 2 
FileInputStream fis = new FileInputStream(‘’toto.txt’’);
Reader reader = new InputStreamReader(fis);
BufferedReader fichier = new BufferedReader(reader);
ligne=fichier.readLine();
while(ligne!=null)
{
System.out.println(ligne);
ligne=fichier.readLine();
}
Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 18
Manipulation des fichiers

 Exercices
 Ecrire un programme qui lit des chaines de caractere
au clavier et les écrit dans un fichier text (utiliser la 
classe PrintStream)
 Ecrire un programme qui lit le contenu d’un fichier 
texte et l’écrit dans un autre fichier.

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 19
Manipulation des fichiers

 La classe File
 Un  objet de type File désigne un fichier ou un 
répertoire
 Constructeur
• public File(String chemin) throws NullPointerException;
• public File(File parent, String fils);
• public File(String parent, String fils);
• Public File(URI uri)

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 20
Manipulation des fichiers
 La classe File
Classe Utilisation
teste si l'application est autorisée à lire dans
boolean canRead()
l'objet dénoté
teste si l'application est autorisée à écrire dans
boolean canWrite()
l'objet dénoté
boolean exists() teste si la référence existe
boolean isDirectory() teste si l'objet est un répertoire
boolean isFile() teste si l'objet est un fichier
teste si l'objet est caché (commence par . sous
boolean isHidden()
Unix)
boolean isAbsolute() teste si la référence est absolue
String getAbsolutePath() renvoie la référence absolue de l'objet

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 21
Manipulation des fichiers
 La classe File
Classe Utilisation
String getAbsolutePath() Référence absolue de l'objet
String getCanonicalPath() Référence absolue canonique de l'objet
String getName() Dernier élément de la référence (basename)
String getParent() Référence du répertoire parent
long lastModified() Date de dernière modification
long length() Longueur de l'objet
Liste des objets contenus dans l'objet s'il s'agit d'un
String[] list()
répertoire.
boolean createNewFile() créé un nouveau fichier vide s'il n'existe pas
boolean mkdir() créé un nouveau répertoire
boolean mkdirs() créé un nouveau répertoire et les intermédiaires
Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 22
Manipulation des fichiers
 La classe File
Classe Utilisation
File[] list() Fichiers et répertoires du répertoire. 
File[] listFiles() Fchiers (sans les répertoires) du rep.
Fichiers (sans les répertoires) qui satisfont 
File listFiles(FileFilter)
un filtre
File listFiles(FilenameFilter)
Liste des éléments racine du système de 
File [] listRoots() fichier . Unix   /
Windows  [C:\, D:\, E:\, F:\, G:\]

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 23
Manipulation des fichiers

Exercice
Ecrire un programme qui affiche le contenu d’un répertoire et
qui précise les sous répertoires de ce répertoire par un
message de type c’est un répertoire.

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 24
Manipulation des fichiers
import java.io.*;
class TestFile {
public static void main(String[] args) {
// accès simple à un fichier
File rep = new File (‘’ .’’);

if (rep.exists()) {
String [] listNomfichier = rep.list();
File [] listFichier = rep.listFiles();

for (int i=0; i<listFichier.length;i++) {
if (listFichier[i].isDirectory())
System.out.println(listNomfichier[i]+" EST UN REPERTOIRE");
};
}
}; Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 25
Manipulation des fichiers
import java.io.*; System.out.println("\nAffichage des fichiers d'un repertoire");
class TestFile {
public static void main(String[] args) { File rep = new File ("D:/JAVA");
// accès simple à un fichier
if (rep.exists()) {
File fichier = new File ("D:/JAVA/TP", "sortie.txt");
String [] listNomfichier = rep.list();
System.out.println("nom fichier = " +  File [] listFichier = rep.listFiles();
fichier.getName());
// Création d'un répertoire for (int i=0; i<listFichier.length;i++) {
File reper = new File ("D:/JAVA/EXO"); if (listFichier[i].isDirectory())
reper.mkdir(); System.out.println(listNomfichier[i]+" EST UN 
REPERTOIRE");
System.out.println("visualisation des partitions  else
d'un disque"); System.out.println(listNomfichier[i]);
File [] partition = reper.listRoots(); }
for (int i=0; i<partition.length;i++) };
System.out.println(partition[i]) }
};

Dr. GOORE BI Tra                                       (+225) 07 90 39 73                      goore@inphb.edu.ci 26

Vous aimerez peut-être aussi