Les flux et les fichiers

Les flux et les fichiers

Synthèse : consultation d’un répertoire en accès direct

Les dimensions des tableaux de caractères sont définies par des constantes symboliques LG_ NOM et LG_PRENOM. Il en va de même pour la taille d’un enregistrement (TAILLE_ ENREG) dont on notera que le calcul doit tenir compte du fait que les caractères sont enregistrés en binaire et qu’ils occupent donc 2 octets. La disposition des différents contrôles ne pose pas de problème particulier. On notera que, avec un gestionnaire de type GridLayout, le conteneur est rempli ligne par ligne, suivant l’ordre dans lequel ils sont ajoutés. Nous utilisons des champs de texte pour toutes les informations mais seuls les deux premiers sont « éditables ». Réaliser un programme permettant de consulter un fichier du type de celui créé par la première solution à l’exercice . Le dialogue s’opérera à travers des contrôles disposés dans une fenêtre comme illustrée ci-aprèsa : L’utilisateur pourra agir indifféremment sur les champs de texte indiquant le nom de fichier ou le nom d’enregistrement. On signalera par des boîtes de message les erreurs suivantes : • fichier inexistant, • information de numéro d’enregistrement non numérique, négative ou supérieure à la taille du fichier. Lorsqu’un fichier sera correctement ouvert, son nom s’affichera dans le titre de la fenêtre. Note : pour que les contrôles soient disposés comme dans notre exemple, on pourra utiliser un gestionnaire de mise en forme de type GridLayout créé par new GridLayout(5, 2).Nous écoutons les événements Focus et Action des deux champs de saisie (nom de fichier et numéro d’enregistrement). Deux méthodes de service nommées nouveauFichier et nouvelEnreg nous évitent de dupliquer certaines instructions. La demande d’ouverture d’un nouveau fichier entraîne tout d’abord la fermeture de tout autre fichier éventuellement ouvert. Puis, nous vérifions l’existence du fichier de nom indiqué en traitant convenablement l’exception générée par sa demande d’ouverture en cas d’inexistence. Lorsque les choses se sont convenablement déroulées, nous déterminons la taille du fichier en octets (méthode length) et nous déterminons le nombre d’enregistrements correspondants. Dans la demande d’un nouvel enregistrement, nous vérifions que : • l’information fournie peut être convenablement convertie en un entier, • qu’elle possède une valeur compatible avec la taille du fichier. Si le numéro d’enregistrement est convenable, nous positionnons le pointeur à l’endroit correspondant du fichier (méthode seek). Nous lisons les différentes informations voulues et nous les affichons dans les champs appropriés. Notez que les tableaux de caractères constituant le nom et le prénom doivent être convertis en chaînes ; pour ce faire, nous utilisons un constructeur de la forme String(char[])

Synthèse : liste d’un fichier texte avec numérotation des lignes

Écrire un programme qui liste en fenêtre console le contenu d’un fichier texte en en numérotant les lignes. On prévoira 4 caractères pour l’affichage du numéro de ligne. Les lignes de plus de 60 caractères seront affichées sur plusieurs lignes d’écran comme dans cet exemple Donnez le nom du fichier texte a lister : e:\book\essai.txt 1 Ceci est la premiere ligne d’un exemple de fichier texte 2 Il contient des lignes de chiffres de longueurs variables dont une de 59 caracteres, une de 60 caracteres et une de 61 caracteres 3 12345678901234567890 4 123456789012345678901234567890123456789012345678901234567890 5 12345678901234567890123456789012345678901234567890123456789 6 123456789012345678901234567890123456789012345678901234567890 1 150 geneli~1.book Page 274 Lundi, 10. juillet 2006 12:46 12 © Éditions Eyrolles 275 Exercice 150 Synthèse : liste d’un fichier texte avec numérotation des lignes Rappelons que, pour la lecture d’un fichier texte, il n’existe pas de classe parfaitement symétrique de la classe PrintWriter. Il faut se contenter de la classe FileReader (symétrique de FileWriter, classe plus rudimentaire que PrintWriter) qu’on couple avec la classe BufferedReader, laquelle dispose d’une méthode readLine de lecture d’une ligne. Nous créons donc un objet de ce type nommé entree en procédant ainsi (nomfich étant la chaîne correspondant au nom du fichier) : BufferedReader entree = new BufferedReader (new FileReader (nomfich)) ; La méthode readLine de la classe BufferedReader fournit une référence à une chaîne correspondant à une ligne du fichier. Si la fin de fichier a été atteinte avant que la lecteur n’ait commencé, autrement dit si aucun caractère n’est disponible (pas même une fin de ligne !), readLine fournit la valeur null. Il est donc possible de parcourir les différentes lignes du fichier, sans avoir besoin de recourir à la gestion des exceptions. En ce qui concerne l’affichage du numéro de ligne (numLigne), il est nécessaire de convertir l’entier le représentant en une suite de 4 caractères. Pour ce faire, nous employons un tableau de 4 caractères nommé charNumLigne que nous initialisons avec des caractères « espace », avant d’y introduire, à partir de la fin, les caractères de la chaîne obtenue par conversion de la valeur de numLigne. La gestion des lignes de plus de 60 caractères se fait simplement en affichant un changement de ligne et une suite de 4+1 espaces. import java.io.* ; public class ListText { public static void main (String args[]) throws IOException { final int longNumLigne = 4 ; // nombre de caracteres utilises pour // afficher le numero de ligne final int nbCarParLigne = 60 ; String nomfich ; String ligne ; // ligne courante du fichier texte char charNumLigne[] = new char[longNumLigne] ; // pour les caracteres // du numero de ligne System.out.print (« Donnez le nom du fichier texte a lister : « ) ; nomfich = Clavier.lireString() ; BufferedReader entree = new BufferedReader (new FileReader (nomfich)) ; int numLigne = 0 ; 7 1234567890123456789012345678901234567890 8 la ligne suivante est vide 9 10 les deux lignes suivantes sont egalement vides 11 12 13 Ceci est la derniere ligne du fichier *** fin liste fichier ***

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *