RÉPUBLIQUE DE DJIBOUTI
INSTITUT AFRICAIN DE
DJIBOUTI
Filière : Géni Informatique (L2)
Semestre 2, 2024/2025
Chapitre 4 : Les entrées et sorties en
Java.
© Mr. Guelleh Robleh Djama
Mr Guelleh 23/03/2025
Introduction
Le package [Link] propose un ensemble de classes permettant de gérer la plupart
des entrées/sorties d’un programme. Cette gestion consiste à créer un objet flux
dans lequel transitent les données à envoyer ou à recevoir. Un flux connecte un
objet Java à un autre élément.
Deux cas sont illustrés dans ce chapitre : les interactions avec un utilisateur (entrée
clavier et sortie écran) et les accès en lecture ou écriture à un fichier
2
2.1 Le flux d’entrée
Un flux d’entrée est une instance d’une sous-classe de InputStream. Chaque classe de flux d’entrée a son propre mode
d’échange de données qui spécifie un format particulier de données ou un accès particulier. Les classes les plus
couramment utilisées sont :
• ByteArrayInputStream permet de lire le flux d’entrée sous la forme d’octets (byte) ,
• DataInputStream permet de lire le flux d’entrée sous la forme de types de données primitifs de Java. Il existe des
méthodes pour récupérer un entier, un réel, un caractère,…
• FileInputStream est utilisé pour lire le contenu d’un fichier. Les objets de cette classe sont souvent encapsulés
dans un autre objet de classe InputStream qui définit le format des données à lire.
• ObjectInputStream permet de lire des objets (c-à-d des instances de classes Java) à partir du flux d’entrée, si ces
objets implémentent les interfaces [Link] ou [Link].
• Reader n’est pas une sous-classe de InputStream mais représente un flux d’entrée pour chaînes de caractères.
Plusieurs sous-classes de Reader permettent la création de flux pour chaînes de caractères.
• Scanner n’est pas une sous-classe de InputStream, mais un Iterator qui permet de lire un flux (fichier ou
chaîne de caractères par exemple) “mot” par “mot” en définissant le délimiteur entre les mots (espace par
défaut).
3
2.1 Le flux d’entrée
La lecture de données à partir d’un flux d’entrée suit le déroulement suivant :
Ouverture du flux : Elle se produit à la création d’un objet de la classe InputStream.
Lors de l’appel au constructeur, on doit préciser quel élément externe est relié au flux (par exemple un
nom de fichier ou un autre flux).
Lecture de données : Des données provenant du flux sont lues au moyen de la méthode read() ou
d’une méthode équivalente. La méthode précise à employer dépend du type de flux ouvert.
Fermeture du flux : Quand le flux n’est plus nécessaire, il doit être fermé par la méthode close().
4
2.1.1 Lecture des entrées clavier
Les entrées provenant de l'utilisation du clavier sont transmises via un flux d'entrée qui est automatiquement
créé pour chaque application Java. Ce flux d'entrée peut être accédé grâce à la variable statique "in" de la
classe [Link]. Ce flux est ensuite utilisé comme paramètre pour construire un autre flux d'entrée.
Généralement, une sous-classe de Reader est utilisée pour récupérer les entrées de l'utilisateur sous forme
de chaînes de caractères.
La classe Clavier en donne un exemple :
5
2.1.2 Lecture de fichier
Il arrive souvent d’enregistrer des données dans des fichiers textes. Il peut alors être utile d’utiliser un BufferedReader ou
un Scanner pour effectuer la lecture.
6
2.1.3 Lecture d’objets enregistrés
Il est parfois utile d’enregistrer l’état d’objet (de n’importe quelle classe implémentant les interfaces
[Link] ou [Link]) pour des exécutions futures. Le flux d’entrée est encore
créé à l’aide de la classe FileInputStream et est ensuite encapsulé dans un autre flux spécifiant le format des
données à lire. L’exemple suivant illustre la lecture d’un objet de la classe Date dans un fichier nommé
[Link] :
7
2.2 Le flux de sortie
Un flux de sortie est une instance d’une sous-classe de OutputStream. Comme pour les flux d’entrée,
chaque classe de flux de sortie a son propre mode d’écriture de données. Les classes les plus couramment
utilisées sont :
● ByteArrayOutputStream permet d’écrire des octets vers le flux de sortie ;
● DataOutputStream permet d’écrire des types de données primitifs de Java vers le flux de
sortie.
● FileOutputStream est utilisé pour écrire dans un fichier. Les objets de cette classe sont
souvent encapsulés dans un autre objet de classe OutputStream qui définit le format des
données à écrire.
● ObjectOutputStream permet d’écrire des objets (c-à-d des instances de classes Java) vers
le flux de sortie, si ces objets implémentent les interfaces Serializable ou Externalizable.
● Writer n’est pas une sous-classe de OutputStream mais représente un flux de sortie pour
chaînes de caractères. Plusieurs sous-classes de Writer permettent la création de flux pour
chaînes de caractères
8
2.2 Le flux de sortie
L’écriture de données vers un flux de sortie suit le même déroulement que la lecture d’un flux d’entrée :
1. Ouverture du flux : Elle se produit lors de la création d’un objet de la classe OutputStream.
2. Ecriture de données : Des données sont écrites vers le flux au moyen de la méthode write()
ou d’une méthode équivalente. La méthode précise à employer dépend du type de flux ouvert.
3. Fermeture du flux : Quand le flux n’est plus nécessaire, il doit être fermé par la méthode
close().
9
2.2.1 Ecriture sur la sortie standard “écran”
Comme pour les entrées du clavier, l’écriture vers l’écran fait appel à la
variable statique out de la classe System. On appelle généralement la
méthode [Link] ou [Link] comme cela a
été fait dans de nombreux exemples de ce cours.
10
2.2.2 Ecriture dans un fichier
L’écriture dans un fichier se fait par un flux de la classe BufferedWriter qui prend en entrée un fichier (instance de
la classe FileWriter). Ce flux de sortie permet d’écrire des caractères dans le fichier grâce à la méthode write().
L’exemple suivant présente une méthode pour écrire un texte dans un fichier :
11
2.2.3 Ecriture d’objets
Le flux de sortie peut également être encapsulé dans un flux de type ObjectOutputStream, comme le
montre l’exemple suivant pour écrire la date courante dans un fichier :
12
Exercice d’application
Ecrire un programme en java permettant de lire les données
stockées dans un fichier "[Link]", et les copier dans un fichier de
sortie "[Link]".
13