Programmation - A. Cohen
Cours

Notion de flux

Sans la possibilité de lire ou d'écrire des informations, un programme va se trouver vite limité

  • Comment prendre l'information en entrée à partir de n'importe quelle source ?

  • Comment envoyer en sortie de l'information vers n'importe quelle destination ?

    • Source et destination : fichier, socket réseau, bloc mémoire

    • Nature des données échangées : texte (caractère, nombre, chaîne de caractères), des images, du son, ...

Notion de flux (stream)

Les flux permettent de travailler avec des données provenant de l'extérieur

Toutes les commandes de type Ouvrir, Enregistrer, ... des programmes classiques font appel aux flux

On parle aussi d'Input/Output

Dans ce cours nous allons nous limiter aux flux de base permettant de lire et d'écrire du texte

La mise en mémoire du contenu d'un flux peut accélérer ses performances

En java, on parle de :

  • flux d'entrée

    • objet à partir duquel on lit une suite d'octets (byte)

  • flux de sortie

    • objet vers lequel on envoie une suite d'octets

Les flux sont définis à l'aide d'objets prédéfinis du langage Java (package java.io)

Il existe ainsi plusieurs outils permettant :

  • le stockage

  • le traitement des données

Remarque :

Dorénavant, dans toutes les classes qui feront usage de flux d'entrée/sortie, il faudra ajouter en début de classe l'instruction suivante :

import java.io.* ;

Fichiers de texte/ Fichiers objet

Il y a deux grandes catégories :

  • les fichiers stockant les informations sous forme de caractères (= fichiers texte)

  • les fichiers stockant les informations sous forme d'objet (=fichier des objets )

Rappel : System.in/ System.out

Comme flux basique, vous avez déjà utilisé

  • System.out pour les sorties

  • System.in pour les entrées

  • il existe également System.err pour les erreurs

Fondamental : Flux d'octets/ Flux de caractères

Les classes suivantes implémentent deux types de flux d'octets, à savoir :

InputStream

et

OutputStream

Or en Java les caractères sont codés en Unicode. Comme les flux d'octets ne conviennent pas pour le traitement des informations codées en Unicode (codage sur deux octets), il a été introduit une hiérarchie de classes pour traiter les caractères Unicode

Les deux classes qui vont permettre de traiter les caractères Unicode sont les suivantes :

Reader

et

Writer

A partir de ces quatre classes, Java fait dériver une multitude de classes

Exemple de quelques classes

Exemples :

  • BufferedInputStream et FileInputStream dérivent de InputStream

  • BufferedOutputStream, FileOutputStream dérivent de OutputStream

  • BufferedReader, FileReader dérivent de la classe Reader

  • BufferedWriter, FileWriter dérivent de la classe Writer

Comment sont constitués ces noms de classes de flux du paquetage java.io ?

Remarque :

Ces mots composés permettent de savoir:

  • l'origine ou la destination du flux : tampon, fichier, tableau, tube

  • le sens de l'échange : Input, Output, Reader, Writer

  • s'il est question d'octets ou de caractères :

    • Stream pour les octets,

    • Reader ou Writer pour les caractères

Exemple : Cas de FileInputStream et de FileOutputStream
  • ils fournissent les flux d'entrée et de sortie associés à un disque dur

  • Il faut donc fournir le nom du fichier ou le chemin complet du fichier dans le constructeur

L'instruction suivante est un exemple de déclaration d'un flux d'entrée associer au fichier qui porte le nom somefile.txt et qui se trouve sur le volume E du disque et dans le dossier data.

FileInputStream fin = new FileInputStream ("E/data/somefile.txt");

Attention :

Si le chemin du fichier n'est pas absolu, Java suppose que le fichier se trouve dans le répertoire courant où se trouve votre programme en cours d'exécution et va donc chercher un fichier portant le nom somefile.txt

Par exemple si vous indiquez simpelemnt ("somefile.txt") cela suppose que le fichier est dans le répertoire courant.

Traitement d'un fichier (page suivante)Fichiers et Applets (page Précédente)
AccueilImprimerRéalisé avec SCENARI