Applets et fichiers

Pour des raisons de sécurité les applets ne peuvent pas lire ou écrire des fichiers sur le système où elles s'exécutent. Par contre elles peuvent lire des fichiers existants sur le serveur html qui les a envoyées. Nous allons écrire une applet qui télécharge un fichier texte et l'affiche.

Les URL

Les URL sont gérés par la classe URL du package java.net.

Constructeur

La classe URL fournit un constructeur qui attend deux arguments:
- objet de type URL donnant l'URL du dossier de base
- chaîne de caractères donnant le nom du fichier

Nous utiliserons la méthode getCodeBase() de l'applet pour obtenir l'URL de base. La création de l'URL associée au fichier à lire prendra la forme :

        URL url=new URL(getCodeBase(),nomFichier);

Cette création peut générer une exception de type MalformedURLException, elle devra donc se faire dans une structure try...catch...

La méthode openStream()

La classe URL permet d'associer le fichier pointé à un flot d'entrée par l'intermédiaire de la méthode openStream(). Celle-ci renvoie un flot de type InputStream. Nous aurons donc :

        InputStream ips=url.openStream();

Lecture du fichier

La lecture du fichier se fera en utilisant un objet de la classe BufferedReader branché sur un InputStreamReader associé au flot d'octets fourni par l'URL.

Les lignes lues seront ajoutées à l'objet zoneTexte de type TextArea. Ceci nous donne le code suivant :

        BufferedReader in=new BufferedReader(new InputStreamReader(ips));
        String ligne;
        while ((ligne=in.readLine())!=null)
         zoneTexte.append(ligne+"\n");
        in.close();

Source complet de l'applet

Nous importons les packages java.net et java.io en plus des packages habituels. La méthode init installe le TextArea zoneTexte et lit un éventuel nom de fichier passé en paramètre. La méthode start se charge de la lecture du fichier.

        import java.applet.*;
        import java.awt.*;
        import java.net.*;
        import java.io.*;

        public class textapplet extends Applet {

         String nomFichier;
         TextArea zoneTexte=new TextArea();
 
         public void init() {
          nomFichier=getParameter("fichier");
          if (nomFichier==null) nomFichier="textapplet.java";
          setLayout(new BorderLayout());
          add(zoneTexte,BorderLayout.CENTER);
         }

         public void start() {
          try {
           URL url=new URL(getCodeBase(),nomFichier);
           //flot associé à l'url
           InputStream ips=url.openStream();
           BufferedReader in=new BufferedReader(
            new InputStreamReader(ips));
           String ligne;
           while ((ligne=in.readLine())!=null)
            zoneTexte.append(ligne+"\n");
           in.close();
          } catch (Exception e) {
           zoneTexte.append("\n"+e.toString()+"\n");
          } 
         }
 
        }



Retour au menu