I. Fichiers de texte I.1 Lecture simple I.1.a Importation Mais il

publicité
I. Fichiers de texte
1 sur 3
I.1 Lecture simple
I.1.a Importation
Il faut importer import java.io.File; et import java.util.Scanner;.
Mais il faudra probablement importer au moins une classe d'exception, la plus générale étant import
java.io.IOException;.
I.1.b Déclaration de variable
Pour utiliser un fichier de texte (stocké en général sur un disque dur) dans un programme, il faut
déclarer une variable d'un type particulier qui "repésentera" ce fichier au sein du programme :
Scanner sr; (sr est le nom de la variable)
I.1.c Ouverture
1) Instruction
La déclaration précédente ne fait que déclarer une variable, sans l'initialiser. L'ouverture d'un fichier
consiste à associer un fichier sur disque à une variable du programme :
sr = new Scanner( new File( nom_fichier ) );
où nom_fichier est une chaîne de caractères (constante ou variable) contenant le chemin d'accès
(absolu ou relatif) au fichier disque.
2) Rappels sur les chemins d'accès (sous Linux)
absolus : /chemin ou ~/chemin
relatifs : chemin ou ./chemin ou ../chemin
chemin : fichier ou répertoire/fichier ou répertoire/sous-répertoire/fichier ou ...
3) Conséquences
Tant que le fichier est ouvert en lecture, les accès en écriture sont refusés à tout autre programme.
I.1.d Test d'ouverture
L'ouverture a pu mal se passer dans plusieurs cas, notamment :
si le fichier n'existe pas
si l'utilisateur n'a pas les droits de lecture sur ce fichier (ou les droits de traverser un répertoire
du chemin d'accès)
Il faut donc tester si l'ouverture s'est bien passée avant de commencer à lire dans un fichier supposé
ouvert; en Java, cela consiste à traiter une exception, en l'occurence :
FileNotFoundException ou plus généralement IOException.
I.1.e Opérations de lecture
mot = sr.next(); (pour lire un seul mot; suppose String mot;)
ligne = sr.nextLine(); (pour lire une ligne; suppose String ligne;)
Attention ! Le(s) caractère(s) de fin de ligne ne fait(font) pas partie de la String ligne .
e = sr.nextInt(); (pour lire un entier; suppose int e;)
(de même pour les byte, short, long, float, double, et boolean, mais pas pour les char !)
Remarque : La lecture des mots peut être influencée par sr.useDelimiter(String) qui
précise les séparateurs de mots à utiliser, et la lecture des nombres peut être influencée par
sr.useRadix(int) qui précise la base à utiliser et par sr.useLocale(Locale) qui précise la
"localisation" à utiliser.
I.1.f Test de fin de fichier
Après de nombreuses opérations de lecture dans un fichier de texte, il se peut qu'il n'y ait plus rien à
lire ! On dit alors qu'on a atteint la fin de fichier.
Selon les systèmes, lire au-delà de cette limite peut soit provoquer une erreur, soit simplement
retourner toujours la même donnée.
Il faut donc tester la fin de fichier AVANT chaque lecture (eh oui, le fichier peut être vide !) :
while ( sr.hasNext() ) {
String mot = sr.next();
traitement du mot lu
}
while ( sr.hasNextLine() ) {
String ligne = sr.nextLine();
traitement de la ligne lue
}
while ( sr.hasNextInt() ) {
int e = sr.nextInt();
traitement de l'entier lu
http://www.esiee.fr/~bureaud/Unites/In101/Co...
11/05/2010 00:13
2 sur 3
}
Remarque : de même pour les byte, short, long, float, double, et boolean, mais pas pour
les char !.
I.1.g Fermeture
Comme expliqué au paragraphe "ouverture", le fichier est plus ou moins inaccessible aux autres
programmes tant que le fichier reste ouvert.
Il faut donc le fermer le plus tôt possible, c'est-à-dire dès qu'on n'en a plus besoin par l'instruction :
sr.close();
Il est souvent judicieux de placer ces instructions dans une clause finally, en les faisant précéder
d'un test tel que : if ( sr != null )
I.1.h Exemples
Soit un fichier contenant :
123 456
+789
On peut envisager au moins 3 manières de le lire (les virgules montrent à l'affichage la séparation
entre les lectures) :
1. mot par mot (mot=sr.next();), on obtient : "123","456","+789"
2. ligne par ligne (ligne=sr.nextLine();), on obtient : "123 456","+789"
3. terme par terme (e=sr.nextInt();), on obtient : 123,456,789
I.2 Écriture simple
I.2.a Importation
Une seule classe à importer (plus les éventuelles classes d'exception) : import
java.io.PrintWriter;
I.2.b Déclaration de variable
PrintWriter pw; (pw est le nom de la variable)
I.2.c Ouverture
1) Instruction
pw = new PrintWriter( nom_fichier );
où nom_fichier est une chaîne de caractères (constante ou variable) contenant le chemin d'accès
(absolu ou relatif) au fichier disque.
2) Conséquences
Tant que le fichier est ouvert en écriture, les accès en lecture et en écriture sont refusés à tout autre
programme.
L'écriture commence par le début du fichier en écrasant toutes les données déjà présentes si le fichier
existait.
I.2.d Test d'ouverture
L'ouverture a pu mal se passer dans plusieurs cas, notamment :
si le fichier existe déjà et que l'utilisateur n'a pas les droits de modification sur ce fichier
si l'utilisateur n'a pas les droits de modification sur le répertoire contenant le fichier
éventuellement selon les systèmes, s'il n'y a plus assez de place sur le disque ou si le quota est
insuffisant
Il faut donc tester si l'ouverture s'est bien passée avant de commencer à écrire dans un fichier
supposé ouvert; en Java, cela consiste à traiter une exception, en l'occurence :
IOException.
I.2.e Opérations d'écriture
pw.print( ligne ); (pour écrire une ligne, suppose String ligne; et ligne initialisée)
Attention ! Pour passer à la ligne suivante, il faut remplacer l'instruction ci-dessus par
pw.println( ligne );
Remarque : Des sorties formattées (presque comme en C) peuvent être obtenues par
pw.printf( format, arguments );
I.2.f Fermeture
Comme expliqué au paragraphe "ouverture", le fichier est inaccessible aux autres programmes tant
que le fichier reste ouvert.
Il faut donc le fermer le plus tôt possible, c'est-à-dire dès qu'on n'en a plus besoin par l'instruction :
pw.close();
Il est souvent judicieux de placer ces instructions dans une clause finally, en les faisant précéder
d'un test tel que : if ( pw != null )
I.3 Autres possibilités des fichiers de texte
http://www.esiee.fr/~bureaud/Unites/In101/Co...
11/05/2010 00:13
II. Applettes
II.1 Concept
pas une application indépendante, mais dépend d'une page html
s'exécute automatiquement au chargement de la page
CORE : indépendant du système d'exploitation
restrictions de sécurité : heureusement !
il existe appletviewer
II.2 Classe (java.applet.Applet, javax.swing.JApplet)
extends JApplet extends Applet extends Panel => this.add( composant graphique );
II.3 Fichier html : exemple
Obligatoire pour le lancement, BlueJ le crée automatiquement
II.4 Méthodes
L'indispensable : init()
Les autres méthodes du cycle de vie : start(), stop(), et destroy()
Récupération des paramètres : getParameter( stringNomParametre ) Attention : peut être nul !
II.5 Classes anonymes :
SuperClasseAbstraite obj = new SuperClasseAbstraite() { méthodes à redéfinir }; OU
UneInterface obj = new UneInterface() { méthodes à implémenter }
II.6 Gestion d'évènements :
interface ActionListener => méthode void actionPerformed( ActionEvent pAE ); par exemple
pour réagir aux clics sur des boutons
package java.awt.event
3 ways to addActionListener() :
1. bouton1.addActionListener(this); et bouton2.addActionListener(this); et définir dans la
classe courante
public void actionPerformed( ActionEvent pAE ) {
if (pAE.getActionCommand().equals(texteBouton1)) action1;
else if (pAE.getActionCommand().equals(texteBouton2)) action2;
else ... }
2. bouton1.addActionListener(bouton1Listener); et
bouton2.addActionListener(bouton2Listener); et définir 2 classes Bouton1Listener et
Bouton2Listener contenant chacune :
public void actionPerformed( ActionEvent pAE ) { action; }
3. bouton1.addActionListener( new ActionListener(){ public void actionPerformed(
ActionEvent pAE ) { action1; } } );
et idem pour bouton2
interface MouseListener => addMouseListener(...) et méthodes mouseClicked( MouseEvent pME ),
mouseEntered( MouseEvent pME ), mouseExited( MouseEvent pME ), mousePressed( MouseEvent
pME ), et mouseReleased( MouseEvent pME ).
interface KeyListener => addKeyListener(...) et méthodes keyPressed( KeyEvent pKE ),
keyReleased( KeyEvent pKE ), et keyTyped( KeyEvent pKE ).
interface WindowListener => addWindowListener(...) et méthodes windowClosing( WindowEvent
pWE ), et beaucoup d'autres ...
Les objets des classes ActionEvent, MouseEvent, KeyEvent et WindowEvent contiennent beaucoup
d'informations sur l'évènement concerné.
Pour ne pas avoir à tout récrire, étendre les classes abstraites MouseAdapter, KeyAdapter et
WindowAdapter.
II.7 Les gestionnaires de disposition
this.setLayout( new XLayout() ); où X peut être Border, Grid, Flow, Card, GridBag, Group, Box, etc...
Lire le poly :
tout jusqu'à la section 2.2, sections 3.1, 4, 5.2.0, 6,
7.1, 7.2, 8.1, 8.2.1.1, et annexes 6 & 7 (à compléter)
3 sur 3
http://www.esiee.fr/~bureaud/Unites/In101/Co...
11/05/2010 00:13
Téléchargement