Lire fichier via une applet

Soyez le premier à donner votre avis sur cette source.

Vue 34 576 fois - Téléchargée 2 014 fois

Description

Exemple simple d'une applet pour lire un fichier sur le disque via une URL grave à getCodeBase
utilisation textare,

Source / Exemple :


package affichefichier;
import java.awt.*;
import java.io.*;
import java.lang.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import java.applet.*;

import java.io.InputStream ;
import java.io.DataInputStream ;
import java.net.URL ;

public class AfficheFichier extends java.applet.Applet {
  boolean isStandalone = false;
  JPanel jPanel1 = new JPanel();
  JTextArea jTextArea1 = new JTextArea();
  JButton jButton1 = new JButton();
  JLabel jLabel1 = new JLabel();
  JTextField jTextNomFichier = new JTextField();
  JLabel jLabel2 = new JLabel();
  private String message;

 class LireFichier
 {
  private DataInputStream lecteur;
  private String LigneLue;
  private String FileName;

    // Constructeur classe LireFichier-initialisation= ouverture fichier
  LireFichier( String NomFichier) throws IOException {
           FileName = NomFichier;
	   try{
//	       lecteur = new DataInputStream( new FileInputStream(FileName) );
//          ---> cela génère une erreur type sécurité...
                lecteur = new DataInputStream( (new URL( getCodeBase(), FileName )).openStream() ) ;
	     }
	   catch (IOException exc){
	       System.out.println(" probleme ouverture avec le fichier " + FileName);
	   }
  }

  String lire() throws IOException {
    System.out.println("Lecture du fichier "+ FileName );
    LigneLue = lecteur.readLine();
    return LigneLue ;
    }

  void Fermer() throws IOException {
      lecteur.close(); }

 }

  /**Construct the applet*/
  public AfficheFichier() {
  }
  /**Initialize the applet*/
  public void init() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  /**Component initialization*/
  private void jbInit() throws Exception {
    this.setLayout(null);
    jPanel1.setLayout(null);
    jButton1.setText("Lecture du fichier...");
    jButton1.setBounds(new Rectangle(17, 210, 134, 23));
    jButton1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        jButton1_actionPerformed(e);
      }
    });
    jLabel1.setText("  Nom fichier : ");
    jLabel1.setBounds(new Rectangle(0, 172, 83, 30));
    jTextNomFichier.setText("test.txt");
    jTextNomFichier.setBounds(new Rectangle(78, 175, 138, 22));
    jLabel2.setForeground(Color.red);
    jLabel2.setText("...");
    jLabel2.setBounds(new Rectangle(9, 409, 398, 17));
    jPanel1.setMinimumSize(new Dimension(400, 500));
    jPanel1.setPreferredSize(new Dimension(400, 500));
    jPanel1.setBounds(new Rectangle(18, 6, 481, 426));
    jTextArea1.setBounds(new Rectangle(6, 5, 237, 155));
    this.add(jPanel1, null);
    jPanel1.add(jTextArea1, null);
    jPanel1.add(jLabel2, null);
    jPanel1.add(jButton1, null);
    jPanel1.add(jLabel1, null);
    jPanel1.add(jTextNomFichier, null);
  }
  /**Start the applet*/
  public void start() {}

  /**Stop the applet*/
  public void stop() {
  }
  /**Destroy the applet*/
  public void destroy() {
  }
  /**Get Applet information*/
  public String getAppletInfo() {
    return "Applet Information";
  }
  /**Get parameter info*/
  public String[][] getParameterInfo() {
    return null;
  }
  /**Main method*/
  public static void main(String[] args) {
    AfficheFichier applet = new AfficheFichier();
    applet.isStandalone = true;
    Frame frame;
    frame = new Frame() {
      protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
          System.exit(0);
        }
      }
      public synchronized void setTitle(String title) {
        super.setTitle(title);
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
      }
    };
    frame.setTitle("test Applet");
    frame.add(applet, BorderLayout.CENTER);
    applet.init();
    applet.start();
    frame.setSize(400,500);
    frame.setVisible(true);
  }

  public void jButton1_actionPerformed(ActionEvent e) {
              //On charge le contenu d'un fichier
              try{
                  jLabel2.setText("Lecture du fichier en cours, veuillez patienter....");
                  rafraichir();
                  actionLire();
                  }
                  catch(IOException exc){ jLabel2.setText("...problème avec lecture fichier...");}
              }

  public void actionLire() throws IOException {
      int index = 0;
      LireFichier lecture = new LireFichier(jTextNomFichier.getText());
      jTextArea1.setText("");
      while (( message = lecture.lire())!= null){
                    index++;
                    jTextArea1.append(message+ "\n" );
                    }
      lecture.Fermer();
      rafraichir();}

  public void afficherErrIO(){
      jLabel2.setText("probleme utilisation IO");
      rafraichir();}

  public void rafraichir(){
        this.repaint();
        this.show();  }

}

Conclusion :


Ici, il faudra ranger le HTML qui appelera AppelleFichier via le code exemple ci-joint :

<html>
<head>
<title>
HTML Test Page
</title>
</head>
<body>
Affichage de l' application lecture d'un fichier à partir d'une applet.<br>
<applet
codebase = "."
code = "affichefichier.AfficheFichier.class"
name = "TestApplet"
width = "600"
height = "500"
hspace = "0"
vspace = "0"
align = "top"
>
</applet>
</body>
</html>

Il faudra avoir un fichier test.txt avec du blabla ASCII dedans, exemple....

Coucou, ceci est un test
maintenant on a la ligne2
la ligne 3
la ligne 5, euh, non 4
oui, c' est la 5

-----------fin du fichier exemple ............

L' exemple a été fait sous JBuilder5, le source zip comporte le fichier projet jpx

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
66
Date d'inscription
jeudi 4 août 2005
Statut
Membre
Dernière intervention
16 décembre 2009

Bonjour :)

Cette astuce peut être appliquée facilement pour faire la même chose sur un serveur FTP ?
J'suppose qu'on peut faire une restriction des dossiers qu'on ne veut pas afficher ? Et concernant les fichiers / dossiers cachés, comment cela se passe-t-il ?

J'ai pas regardé le code, mais j'voulais relancer :)

Merci

Miz.
Messages postés
5
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
22 juin 2008

salut a tous, je suis en fait debutant a la nouvelle technologie j2ee en pratique,mt je veux que vous m'aidiez par une simple explication concernant cette tech et me dirriger vers l'essentiel a apprendre et les outils indispensable avec des exemples claires

merci, A+
ma3loumvine@yahoo.fr
Messages postés
52
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
18 juin 2008

je sais qu'il y a moyen de contourner la contrainte de sécurité sur les applets (y en a plusieurs en faite), mais le pb est qu'il faut configurer tous les clients pour que l'applet lit le fichier.
c'est pas du tout bon ça.
pour lire un fichier il suffira de faire une mini appli web, qui upload le fichier sur le serveur, le lit puis le jette , je pense que c mieux .
Messages postés
6
Date d'inscription
mercredi 16 août 2006
Statut
Membre
Dernière intervention
4 mars 2008

salut
je suis d'accord avec toi tULIPOs pour la lecture d'un fichier à partir d'une applet, mais pour activé cette option il faut signer l'applet c-à-d executer cette commande sous console : keytool -genkey -alias signeApplet -validity 365
aprés remplir les infos; et enfin jarsigner VotreApplet.jar signerApplet, et vous pouvez faire une lecture d'un fichier à partir d'une applet
Messages postés
52
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
18 juin 2008

salut
je tiens à averir tout le monde qu'une applet ne peut pas acceder au disque dur du client , c impossible et ceci pour des raison de sécurité , le but unique d'utiliser une applet et le besoin de l'api awt , pour une JApplet celui de swing , alors ca ne sert a rien de développer une applet qui lit un fichier car il faut que vous sachier tous que l'applet s'execute coté client, donc en fin de compte elle ne lira ni fichier ni roman .

alors svp arreter de faire des choses qui ne serve à rien
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.