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