Flux de caractères

Il arrive très fréquemment que les octets d'un flux servent à représenter des caractères. Pour cette raison, il existe un ensemble de classes dédiées aux flux de caractères.

La classe abstraite Reader représente un flux de caractères d'entrée sans plus de détails. Elle est dérivée en de nombreuses classes qui précisent soit l'origine des données, soit le format des données.

Nous allons principalement manipuler des flux d'entrée provenant de fichiers, construits comme des objets de la classe FileReader. Cette classe permet seulement la lecture caractère par caractère, donc pour lire ligne par ligne (et pour améliorer les performances), il faut connecter ce flux à un tampon de la classe BufferedReader.

Une autre source possible de caractères est l'entrée standard. Comme l'attribut de classe System.in appartient à la classe InputStream, pour le tranformer en un flux de caractères il faut employer un InputStreamReader. Là aussi, il est souhaitable de lire ligne par ligne en connectant ensuite ce flux à un BufferedReader.

La classe abstraite Writer représente un flux de caractères de sortie sans plus de détails. Elle est dérivée en de nombreuses classes qui précisent soit la destination des données, soit le format des données.

Nous allons principalement manipuler des flux de sortie vers des fichiers, construits comme des objets de la classe FileWriter. Cette classe permet seulement l'écriture caractère par caractère, donc pour écrire ligne par ligne (et pour améliorer les performances), il faut connecter ce flux à un tampon de la classe BufferedWriter.

  1. Devinette. Écrivez une application qui choisit au hasard un nombre compris entre 1 et 100 et qui donne cinq tentatives à l'utilisateur pour le deviner. À chaque tentative infructueuse, le programme offrira un indice en affichant + ou -.

  2. Image. Le fichier image.xpm représente une image dans un format standard (mais inusité).

    Écrivez une application qui lit ce fichier puis ouvre une fenêtre de la taille adéquate dans laquelle apparaît l'image correspondante.

    Remarque Pour isoler les données contenues dans le fichier, vous aurez sans doute besoin des méthodes charAt, split et substring de la classe String.

  3. Questionnaire. Le fichier java.quiz contient une liste de questions et de réponses. Écrivez une application sans interface graphique qui pose une à une les questions, laisse l'utilisateur répondre, puis stocke les réponses dans un fichier reponses.txt (un caractère par réponse : 1, 2 ou 3).

    bob@box:~$ java Questionnaire
    Quel mot-clé représente la réalisation d'une interface ?
      1. extends
      2. implements
      3. throws
    > 1
    ...
    

    En cas d'erreur d'accès au fichier des questions, un message devra être affiché à la console et le programme doit alors se terminer sans créer de fichier de réponse.

  4. Archive. La commande tar est employée pour regrouper plusieurs fichiers en un seul (sans compression). Le format correspondant est décrit ici.

    Écrivez une application qui prend sur sa ligne de commande le nom et le chemin d'une archive .tar et qui en affiche le contenu (comme la commande tar avec l'option t).

retour à la page d'accueil

retour au sommet