Voici
la nouvelle classe Contenu complète avec les changements/nouveautés
en gras; nous les expliquons ensuite :
class Contenu extends
JPanel
{
private FenetreSimple maFenetre = null;
String monFichier = "texte.txt";
String fichierContenu= "";
JTextArea champTexte = new JTextArea();
public Contenu(FenetreSimple maFenetre)
{
setLayout(new BorderLayout());
JButton boutonFermer = new JButton("Charger
fichier");
add(boutonFermer, BorderLayout.SOUTH);
champTexte.setLineWrap(true);
champTexte.setWrapStyleWord(true);
add(champTexte);
this.maFenetre = maFenetre;
MyListener monEcouteur = new MyListener();
boutonFermer.addActionListener(monEcouteur);
}
public void LireFichier()
{
try
{
RandomAccessFile raf = new RandomAccessFile(monFichier,
"r");
String ligne;
while ( (ligne = raf.readLine())
!= null )
{
fichierContenu +=
ligne;
}
champTexte.setText(fichierContenu);
}
catch (IOException e)
{
System.out.println("erreur dans: "
+ e);
}
}
class MyListener implements ActionListener
{
public void actionPerformed(ActionEvent
event)
{
LireFichier();
}
}
}
Expliquons ces lignes dans l'ordre...
String monFichier = "texte.txt";
String fichierContenu= "";
JTextArea champTexte = new JTextArea();
1) nous définissons la variable monFichier,
contenant le nom du fichier à charger ;
2) puis la variable fichierContenu, qui recevra
le contenu du fichier lorsque nous le chargerons ;
3) nous définissons enfin champTexte, un
objet de type JTextArea. C'est ici que s'affichera
notre fichier. Il est défini avant le constructeur afin que nous puissions
y avoir accès depuis le constructeur tout comme les autres fonctions de
la classe.
JButton boutonFermer = new JButton("Charger
fichier");
Nous changeons simplement l'étiquette du
bouton, qui auparavant s'appelait "Fermer".
champTexte.setLineWrap(true);
champTexte.setWrapStyleWord(true);
add(champTexte);
Nous
sommes ici dans le constructeur de Contenu. Avant d'afficher champTexte
à l'aide de add(), nous appelons ses méthodes
setLineWrap() et setWrapStyleWord()
avec "true" afin que le texte revienne à la ligne s'il était
plus long que la largeur de la fenêtre.
public void LireFichier()
{
try
{
RandomAccessFile raf = new RandomAccessFile(monFichier,
"r");
String ligne;
while ( (ligne = raf.readLine()) != null )
{
fichierContenu += ligne;
}
champTexte.setText(fichierContenu);
}
catch (IOException e)
{
System.out.println("erreur dans: " + e);
}
}
La fonction LireFichier()
est le coeur de notre application, comme son nom l'indique.
Nous avons choisi d'accéder à notre fichier au moyen de la classe
RandomAccessFile(). Celle-ci permet d'extraire
(et stocker) des données dans un fichier à accès aléatoire.
"Accès aléatoire" signifie que la classe dispose de méthode
permettant de déplacer la "tête de lecture" au sein du
fichier, ce dont nous n'avons pas besoin ici... Ce qui nous intéresse,
c'est que cette classe nous permet d'accéder à un fichier de manière
directe, à la différence des autres classes où l'accès
est "séquentiel" : les données doivent être traitées
avant de pouvoir être exploitée. Notons que cette différence
tient au fait que RandomAccessFile() n'est pas
un flux à proprement parler, et est donc bien à part des autres
classes. Nous l'utilisons ici tout simplement parce qu'elle plus rapide à
mettre en oeuvre dans notre cas, mais son utilisation n'est pas universelle...
|
La chaîne ligne
sera utilisée par la structure while()
: on y stockera les lignes de texte tirées de notre objet raf
à l'aide de la méthode readLine(),
et ce tant que nous ne tirons pas une ligne vide, puis nous remplissons la chaîne
fichierContenu (définie au début
de notre code) grâce à l'opérateur +=,
qui nous permet d'ajouter une chaîne à la suite du contenu déjà
présent dans la variable.
Ceci fait, nous passer le contenu de fichierContenu
à notre champ champTexte, via sa méthode
setText().
L'ensemble de ce code est placé au sein
d'un gestionnaire d'exceptions,
pour s'assurer que tout se déroule comme on le souhaite.
Reste à lier cette fonction LireFichier()
à notre bouton : c'est fait grâce à l'écouteur que
nous avons attaché à ce dernier :
class MyListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
LireFichier();
}
}
Ainsi paré, notre
programme est prêt à être lancé. Il ne reste qu'à
créer un fichier texte simple, au même niveau que le programme, appelé
"texte.txt".
Page 1
| 2
|