Académique Documents
Professionnel Documents
Culture Documents
1 Introduction
Les chiers sont des structures de donnes stockes sur disque. A la diffrence des donnes gres en mmoire par les programmes (entiers, boolens, nombres rels, tableaux, objets de diffrents types, etc), qui sont perdues la n du programme, les chiers sont des structures de donnes persistantes, quon peut retrouver la prochaine fois que le programme sera excute. Au niveau physique, un chier est compos dune suite de blocs disque de taille constante, gr par le systme dexploitation, qui offre aux programmes une vue logique du chier. Au niveau logique, le chier est une suite doctets, qui reprsentent des informations de diffrents types : entiers, boolens, nombres rels, tableaux, objets, etc. Pour pouvoir interprter ces informations lors de la lecture du chier, il faut connatre le type dinformation qui y a t crit. Les chiers texte sont un cas particulier de chier, o toute linformation est reprsente par une suite de caractres. On peut voir un chier texte comme une longue chane de caractres stocke sur disque. Les lignes successives de texte sont spares par un ou plusieurs caractres de n de ligne : la squence de deux caractres \r et \n en windows. le caractre \n en unix et Mac Intosh. le caractre \r sur les anciens systme Apple. Une diffrence importante entre les chiers textes et les chiers binaires ordinaires est que toute donne est reprsente par sa chane de caractres dafchage. Par exemple le boolean true, qui normalement est reprsent sur un octet, apparatra dans le chier texte en tant que chane de caractres true. Un entier, qui occupe normalement 4 octets, sera reprsent par la suite de caractres chiffres qui le composent. Par exemple lentier 125 sera reprsent par la chane de caractres 125, tandis que lentier -34567 par la chane -34567. Donc des entiers diffrents, qui en mmoire ont la mme taille (4 octets), auront des tailles diffrentes dans le chier texte. Il faut noter que des perturbations lies au codage des caractres peuvent survenir. Il existe en effet deux grands codages : le codage ASCII qui est utilis par les systmes dexploitation actuels (unix, windows). Il code chaque caractre avec un octet. Il existe plusieurs variantes permettant de reprsenter des jeux de caractres diffrents, notamment pour ce qui concerne les accents. le codage unicode, qui est utilis par Java. Il nen existe quune version unique, mais les polices disponibles sur un ordinateur donn ne couvrent pas tous les caractres unicode. Les caractres sont cods sur deux octets. le codage UTF-8 est un codage intermdiaire entre les deux prcdents, permettant de stocker de lunicode dans un systme bas sur lASCII. Sur un ordinateur bien congur, il nest pas ncessaire de connatre le codage pour faire fonctionner les programmes java. En revanche, il peut y avoir des difcults relire sur un ordinateur donn 1
des chiers crs sur un autre ordinateur. Java offre une large palette de classes et mthodes pour utiliser les chiers, dont nous prsenterons ici seulement les plus importantes, travers des exemples. Toutes ces classes se trouvent dans le paquetage java.io, qui doit tre import dans le programme qui utilise les chiers.
La mthode substring de String extrait une sous-chane de la chane. Elle prend un ou deux paramtres : le premier est la position de dbut et le second (sil existe) est la position tout de suite aprs la sous-chane extraire. Si le second paramtre nest pas prcis, on extrait jusqu la n de la chane. La mthode parseInt de la classe Integer, transforme la chane passe en paramtre en une valeur entire. Si la chane nest pas un entier correct, lexception NumberFormatException est leve. La technique dextraction des entiers de la chane est la suivante. On limine les espaces au dbut et la n avec trim, ensuite on cherche le premier espace. Sil existe (pos >= 0, on extrait la sous-chane entier en sarrtant pos, sinon cest toute la chane (reste) qui reprsente lentier. On transforme en entier, on le rajoute la somme, ensuite on calcule le reste de la chane et tout est rpt jusqu ce que le reste devient vide. Pour le second cas, on utilise la mthode split de String. Elle prend en paramtre une chane de caractres qui sert de dlimiteur aux sous-chanes extraire. Elle retourne un tableau de sous-chanes, extraites de la chane initiale par rapport au dlimiteur. Dans notre exemple, le rsultat contient 3 sous-chanes : " texte", " 15 " et " final".
catch ( IOException e ){ T e r m i n a l . e c r i r e S t r i n g l n ( " P r o b l m e l a l e c t u r e du f i c h i e r " ) ; } } } On voit dans ce programme un exemple de conversion dentier en caractre : (char) c. Il est parfois plus agrable de faire une lecture caractre par caractre que ligne par ligne.
A la n de lcriture du chier, il faut fermer le PrintWriter avec la mthode close(), qui peut produire une exception IOException.