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 sont gérés par la classe URL du package java.net.
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 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();
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();
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"); } } }