
Travaux pratique de Méthodologie et Langage de Programmation, UMONS/Polytech, TP4 2
 b)Fichiers et flots de données
Java considère que chaque fichier est un flot séquentiel d'octets. Un flot classique utilisé depuis 
le début des séances de TP est System.out; ce dernier permet d'envoyer des informations vers la sortie 
standard   (la   console).   On   distingue   également  System.in  (flot   d'entrée   standard   :   le   clavier)   et 
System.err (flot d'erreur standard : la console).
La gestion de fichier se fait à l'aide des classes du package java.io. Les classes suivantes sont 
couramment utilisées :
●FileInputStream : pour l'entrée d'octets à partir d'un fichier;
●FileOutputStream : pour la sortie d'octets vers un fichier;
●FileReader : pour l'entrée de caractères à partir d'un fichier;
●FileWriter : pour la sortie de caractères vers un fichier.
Il est également possible d'enregistrer directement des objets sans devoir stocker manuellement 
chaque   attribut   de   l'objet.   Cela   est   rendu   possible   grâce   à  l'implémentation   de   l'interface 
java.io.Serializable dans la déclaration de la classe. De cette manière, les objets instanciés à partir 
de cette classe pourront être utilisés avec ObjectInputStream et ObjectOutputStream.
Remarque :  il  est important que toutes  les variables  d'instance de  la  classe implémentent 
également l'interface Serializable.
Une classe très utile en vue de naviguer dans le système de fichiers est la classe JFileChooser 
du package  javax.swing.  Cette classe présente des méthodes  showOpenDialog  et  showSaveDialog 
permettant l'ouverture d'une boîte de dialogue de choix d'un fichier (respectivement en vue de l'ouvrir ou 
d'y   enregistrer   des   informations).   La   méthode  getSelectedFile  retourne   un   lien   vers   le   fichier 
sélectionné ; ce lien sera enregistré dans un objet File qui sera le descripteur de fichier. L'ouverture du 
flux se fait alors de la manière suivante :
ObjectOutputStream sortie = new ObjectOutputStream( new FileOutputStream( nomDeFichier ));
où nomDeFichier est un objet de type File.
L'enregistrement d'un objet dans le fichier se fera à l'aide de la méthode writeObject  de la 
classe  ObjectOutputStream  et la fermeture du descripteur de fichier sera réalisée par la méthode 
close.
La lecture d'un objet depuis un fichier se fera à l'aide de la méthode readObject de la classe 
ObjectInputStream; celle-ci renvoie un objet générique Object qui devra donc être transtypé suivant 
le type d'objet à lire. Par exemple :
Enregistrement enregistrement = (Enregistrement) entree.readObject();
Remarque : une erreur lors d'un accès à un fichier lancera une exception du type IOException.
UMONS/Polytech
Pierre Manneback, Sébastien Frémal 2014-2015