TUTORIELS 
Java : afficher un fichier texte

Page 1 | 2

Seconde partie de notre série "coup de pouce" pour les débutants Java, ici en abordant les flux E/S.
 (25 février 2004)
 
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...

Forums
* Discutez en sur les forums

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

 
[ Xavier BorderieJDNet
 
Accueil | Haut de page