problème d'accès à l'url

tounsimaroua1 Messages postés 6 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 20 février 2012 - 27 juil. 2011 à 15:35
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 28 juil. 2011 à 11:56
salut à tous,
je suis entrain de réaliser une application java necessitant la parcours d'un fichier html. j'ai trouvé un probléme d'accès à l'url j'ai fais le code suivant:
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

// Classe dérivée de HTMLDocument pour permettre de spécifier
// un reader différent dans la méthode getReader ()
public class HTMLDocumentLinks extends HTMLDocument
{
// Ensemble des ancres de ce fichier HTML
private Vector anchors = new Vector ();
// Ensemble des liens URLs trouvés dans ce fichier
private Vector urls = new Vector ();
// Ensemble des URLs mal écrites dans ce fichier
private Vector malformedURLs = new Vector ();

// Constructeur
public HTMLDocumentLinks (URL file)
{
// Mémorisation de la base du fichier HTML
setBase (file);
}

public final Vector getAnchors ()
{
return anchors;
}

public final Vector getURLs ()
{
return urls;
}
public final Vector getMalformedURLs ()
{
return malformedURLs;
}

private void addAnchor (String anchor)
{
// Ajout de l'ancre à l'ensemble des ancres
anchors.addElement (anchor);
}

private boolean ignoreURL (String urlString)
{
// Ajout uniquement des URLs relatives à ce fichier
// (les fichiers sans protocole défini avec ':').
// Eventuellement vous pouvez filtrer différemment les
// URLs (pas de cgi par exemple,...)
return urlString.indexOf (':') >= 0;
}

private void addURL (String urlString)
{
if (!ignoreURL (urlString))
try
{
// Fabrication de l'URL relative à ce fichier
// pour l'ajouter à l'ensemble des URLs qu'il référence
URL url = new URL (getBase (), urlString);
// Sous Java 1.2.1, bug sur la construction des URLs
// si urlString commence par # avec le protocole file
// => construction differente de l'URL dans ce cas
if (urlString.startsWith ("#"))
url = new URL (getBase ().toString () + urlString);

if (!urls.contains (url))
urls.addElement (url);
}
catch (MalformedURLException e)
{
malformedURLs.addElement (urlString);
}
}

// Méthode outrepassée pour fournir un reader différent
public HTMLEditorKit.ParserCallback getReader (int pos)
{
return new LinkReader ();
}

// Les méthodes de cette classe sont rappelées par
// le parser HTML suivant les différents tag HTML lus.
// Ici, le but recherché est de garder une trace de tous
// les tags qui font appels à des URLs (fichiers HTML, images,...).
private class LinkReader extends HTMLEditorKit.ParserCallback
{
// Méthode appelée quand un tag de début est rencontré
public void handleStartTag (HTML.Tag tag, MutableAttributeSet att, int pos)
{
String attribute;
if (tag.equals (HTML.Tag.A)) // Tags ou
{
attribute = (String)att.getAttribute (HTML.Attribute.NAME);
if (attribute != null)
addAnchor (attribute);
else
{
attribute = (String)att.getAttribute (HTML.Attribute.HREF);
if (attribute != null)
addURL (attribute);
}
}
else if (tag.equals (HTML.Tag.APPLET)) // Tag
{
attribute = (String)att.getAttribute (HTML.Attribute.CODE);
if (attribute != null)
{
String archive = (String)att.getAttribute (HTML.Attribute.ARCHIVE);
if (archive != null)
// Branchement sur le fichier d'archive s'il existe
attribute = archive;
else
if (!attribute.endsWith (".class"))
attribute += ".class";

// Recherche du répertoire éventuel relatif à l'applet
String codebase = (String)att.getAttribute (HTML.Attribute.CODEBASE);
if (codebase != null)
if (codebase.endsWith ("/"))
attribute = codebase + attribute;
else
attribute = codebase + '/' + attribute;
addURL (attribute);
}
}
else if ( tag.equals (HTML.Tag.BODY) // Tag
|| tag.equals (HTML.Tag.TABLE) // Tag <TABLE BACKGROUND=...>
|| tag.equals (HTML.Tag.TR) // Tag <TR BACKGROUND=...>
|| tag.equals (HTML.Tag.TD)) // Tag <TD BACKGROUND=...>
{
attribute = (String)att.getAttribute (HTML.Attribute.BACKGROUND);
if (attribute != null)
addURL (attribute);
}
}

// Méthode appelée quand un tag simple est lu
public void handleSimpleTag (HTML.Tag tag, MutableAttributeSet att, int pos)
{
String attribute;
if ( tag.equals (HTML.Tag.FRAME) // Tag <FRAME SRC=...>
|| tag.equals (HTML.Tag.IMG)) // Tag
{
attribute = (String)att.getAttribute (HTML.Attribute.HREF);
if (attribute != null)
addURL (attribute);
}
}

// HTMLEditorKit.ParserCallback définit aussi d'autres méthodes
// qu'il est inutile d'outrepasser ici (tag de fin, commentaires,
// corps de texte,...)
}

// Méthode main () d'exemple de mise en oeuvre, prend en argument
// un nom de fichier HTML sous forme d'URL, par exemple :
// java HTMLDocumentLinks file:/disk/dir1/index.html
public static void main (String args [])
{
try
{
// Ouverture du fichier contenu dans l'argument 0
URL fileURL = new URL (args [0]);
Reader urlReader = new BufferedReader (
new InputStreamReader (fileURL.openStream ()));

// Création d'une instance de parser
HTMLDocumentLinks doc = new HTMLDocumentLinks (fileURL);

// Parsing du fichier HTML avec Swing
new HTMLEditorKit ().read (urlReader, doc, 0);
urlReader.close ();

// Listing des ancres et des URLs trouvées dans le fichier
System.out.println ("Liste des ancres :");
for (Enumeration e = doc.getAnchors ().elements ();
e.hasMoreElements (); )
System.out.println (e.nextElement ());

System.out.println ("\nListe des URLs :");
for (Enumeration e = doc.getURLs ().elements ();
e.hasMoreElements (); )
System.out.println (e.nextElement ());
}
catch (IOException e)
{
System.out.println ("Probleme d'acces a l'URL : " + args [0] + ", " + e);

}
catch (BadLocationException e)
{ }
}
}
à l'execution je trouve l'exception suivante:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at HTMLDocumentLinks.main(HTMLDocumentLinks.java:171)

Merci pour l'aide

4 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 juil. 2011 à 15:53
Bonjour,

Peux tu nous signaler la ligne qui lève l'exception et utiliser les baliser pour afficher ton code (troisème bouton à droite). Enlève également tous les commentaires qui nuisent à la lisibilité.

Excuse moi mais quelle horreur ce code, tu utilises les bloc catch comme des else, dans ces blocs, tu traites des erreurs normalement, pas des fonctionnement normaux de l'application. Tu ne respectes pas les normes d'écriture de sun (enfin oracle maintenant) et pire, tu as des bloc catch qui sont vides !!
0
Utilisateur anonyme
27 juil. 2011 à 23:45
Bonsoir

Essaie de taper :
java HTMLDocumentLinks "file:/disk/dir1/index.html"

Je crois que c'est carrément le tableau args qui est vide. Néanmoins, écoute Julien39, ça nous facilitera la tâche.











T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
tounsimaroua1 Messages postés 6 Date d'inscription samedi 6 février 2010 Statut Membre Dernière intervention 20 février 2012
28 juil. 2011 à 11:10
Bonjour,
Merci Julien39,
Mais ,J'ai pas compris ce que veut dire " utiliser les baliser pour afficher ton code (troisème bouton à droite)",
sachant que je travaille sous eclipse.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
28 juil. 2011 à 11:56
Les balises c'est sur le forum, le troisème bouton à droite au dessus de la zone de texte (quand tu passes au dessus, tu choissi ton langage) et ca colorisera ton texte comme ca :

public class Exemple {
   //Le code est colorisé et l'indentation respectée
}
0
Rejoignez-nous