URL et java

La notion d'URL cache totalement le fait que le fichier n'est pas necessairement sur la machine locale et qu'il faut eventuellement le rapatrier a l'aide d'un protocole quelconque.

Dans l'exemple suivant, une applet va recuperer le contenu de cette page et va automatiquement en afficher une partie.

Applet :

Code de l'applet :

import java.applet.* ;

import java.awt.*;

import java.net.* ; // package reseau

import java.io.* ; // package entrees/sorties

public class url extends Applet

{

    protected int combien, ligne ;

    protected StringBuffer message ;

    protected Graphics gc ;

    URL mon_url ;

    DataInputStream flux ;

    public void init()

    {

      int i ;

      gc = getGraphics() ;

      try { mon_url = new URL("http://www-lil.univ-littoral.fr/~ris/cours/java/paral/url.html") ; }

      catch (MalformedURLException me) { }

    }

    public void start()

    {

      int i ;

      ligne = 1 ; message = new StringBuffer(" Cliquez sur la souris pour lancer l'affichage.") ;

      try { flux = new DataInputStream(mon_url.openStream()); }

      catch (IOException ioe) { message.append(" Erreur URL") ; }

      update(gc) ;

    }

    public void stop()

    {

      try { flux.close()); }

      catch (IOException ioe) { message.append(" Erreur fermeture URL") ; }

      message = new StringBuffer("Lecture finie") ; ligne++ ;

      paint(gc) ;

    }

    public void destroy()

    { }

    public void paint(Graphics g)

    { g.setColor(Color.black) ; g.drawString(message.toString(), 5, 10*ligne) ; }

    public boolean mouseDown(Event evt, int x, int y)

    {

      int i ; String ligne_lue ;

      boolean arret=false ;

      try

      { // affiche le contenu du fichier url.html

        while ((ligne_lue = flux.readLine()) != null && !arret)

        {

          message = new StringBuffer(ligne_lue) ; ligne++ ; paint(gc) ;

          if (ligne>=29) arret=true ; //avant le code de l'applet

        }

      }

      catch (IOException ioe)

      { message=new StringBuffer(" Erreur lecture URL : " + ioe.toString()) ; paint(gc) ; }

      stop() ;

      return(true) ;

    }

}

ll est egalement possible de realiser des operations d'ecriture sur une URL. Par exemple, si l'on veut recuperer un page de questionnaire, il faut d'abort ouvrir une connexion par

URLConnection connect = mon_url.openconnection()

Il est alors possible de lire (lecture sur connect.getOuputStream()) de la meme facon que nous l'avons fait directement avec l'URL, mais egalement d'ecrire (pour repondre au questionnaire par exemple -> ecriture sur connect.getInputStream()).


Ph. RIS 1997