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