[Java] Javaaaa ? Nan ! Javapas.
sebsauvage
Messages postés
33415
Statut
Modérateur
-
choubaka Messages postés 39986 Date d'inscription Statut Modérateur Dernière intervention -
choubaka Messages postés 39986 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour tout le monde.
Je suis en train d'écrire une chtite applet en Java, mais Dieu que ce langage est verbeux !
Je cherche à faire un truc très simple:
Je donne une URL, il me renvoie le code HTML de la page dans une string.
Simple, non ?
En Python, c'est facile:
Et voilà j'ai ma chaîne.
Mais en Java j'ai l'impression qu'on est obligé de passer par 3 tonnes d'objets (URL, URLConnection, InputStream...), par un tableau de byte[], et enfin un objet String.
C'est aussi lourd que ça ou bien je m'y prend mal ?
Il y-a-t'il un moyen simple et efficace de faire ça ?
Merci d'avance.
Je suis en train d'écrire une chtite applet en Java, mais Dieu que ce langage est verbeux !
Je cherche à faire un truc très simple:
Je donne une URL, il me renvoie le code HTML de la page dans une string.
Simple, non ?
En Python, c'est facile:
htmlPage = urllib.urlopen("http://www.commentcamarche.net").read()
Et voilà j'ai ma chaîne.
Mais en Java j'ai l'impression qu'on est obligé de passer par 3 tonnes d'objets (URL, URLConnection, InputStream...), par un tableau de byte[], et enfin un objet String.
C'est aussi lourd que ça ou bien je m'y prend mal ?
Il y-a-t'il un moyen simple et efficace de faire ça ?
Merci d'avance.
A voir également:
- [Java] Javaaaa ? Nan ! Javapas.
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
8 réponses
Salut Sebsauvage!
Je ne suis pas entièrement sûr que ça marche (pas moyen de tester tout de suite) mais essaie la méthode getContent() sur ton objet URL. Ca revient à passer par URLConnection.getContent(), il est donc possible que ça fonctionne.
Mais je suis pas sûr du tout...
Nictus
Je ne suis pas entièrement sûr que ça marche (pas moyen de tester tout de suite) mais essaie la méthode getContent() sur ton objet URL. Ca revient à passer par URLConnection.getContent(), il est donc possible que ça fonctionne.
Mais je suis pas sûr du tout...
Nictus
D'après la doc, getContent() renvoie un Object.
Dans mon cas, il semble que ça renvoie un InputStream.
Je suis donc encore obligé de créer un byte[] pour lire le stream (avec .read()), puis convertir le byte[] en String.
Je trouve ça lourd.
ça serait bien le diable qu'il n'y ait pas moyen de faire plus simple, mais je ne vois pas.
mmm.... j'espère trouver mieux.
Dans mon cas, il semble que ça renvoie un InputStream.
Je suis donc encore obligé de créer un byte[] pour lire le stream (avec .read()), puis convertir le byte[] en String.
Je trouve ça lourd.
ça serait bien le diable qu'il n'y ait pas moyen de faire plus simple, mais je ne vois pas.
mmm.... j'espère trouver mieux.
J'ai trouvé ça sur le web:
http://groups.google.com/groups?selm=7n5pj3%24kq0%40dfw-ixnews5.ix.netcom.com
J'essai et je vous tiens au courant.
(Il me semblait avoir déjà essayé ça, et que ça me pétait un CastException... marf... je vais ré-essayer).
(PS: Pour info, le but de mon applet c'est de faire l'installation et la mise à jour automatique de la version gratuite de F-Prot, c'est à dire que ça automatise les manipulations décrites là: http://sebsauvage.net/logiciels/integration_fprot.html )
http://groups.google.com/groups?selm=7n5pj3%24kq0%40dfw-ixnews5.ix.netcom.com
J'essai et je vous tiens au courant.
(Il me semblait avoir déjà essayé ça, et que ça me pétait un CastException... marf... je vais ré-essayer).
(PS: Pour info, le but de mon applet c'est de faire l'installation et la mise à jour automatique de la version gratuite de F-Prot, c'est à dire que ça automatise les manipulations décrites là: http://sebsauvage.net/logiciels/integration_fprot.html )
Ce qu'il faudrait tester, c'est ce fameux objet renvoyé par getContent().
Mais malgré tout je ne suis pas sûr qu'il y ait une meilleure solution que le stream, etc... car l'objet URL peut désigner n'importe quel type d'url... (en tous cas c'est ce que dit la doc)
Ou alors tu crées une classe dérivée d'URL qui n'accepte que des adresses finissant par .htm ...
Euh non en fait c'est pas génial, autant garder l'autre méthode!!!
Bonne chance!!!
Nictus
Mais malgré tout je ne suis pas sûr qu'il y ait une meilleure solution que le stream, etc... car l'objet URL peut désigner n'importe quel type d'url... (en tous cas c'est ce que dit la doc)
Ou alors tu crées une classe dérivée d'URL qui n'accepte que des adresses finissant par .htm ...
Euh non en fait c'est pas génial, autant garder l'autre méthode!!!
Bonne chance!!!
Nictus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon j'ai essayé la solution à l'URL que j'ai donnée:
Mais à l'exécution j'ai droit à un java.lang.ClassCastException.
myConnection.getContent().toString() me dit:
"sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@6e293a"
ça me semble pas castable en String... pas grave je continue à investiguer.
URL myURL = new URL("http://www.blablabla.com");
URLConnection myConnection = myURL.openConnection();
htmlCode = (String) ( myConnection.getContent() );
Mais à l'exécution j'ai droit à un java.lang.ClassCastException.
myConnection.getContent().toString() me dit:
"sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@6e293a"
ça me semble pas castable en String... pas grave je continue à investiguer.
En lisant, j'ai compris que le .getContent() ne renvoie le contenu que si un handler spécifique au type MIME est installé.
Par défaut, il ne semble y avoir que text/plain.
Ils semblent tous dire qu'il faut passer obligatoirement par un stream.
(URL.openStream()).
Si j'arrive à trouver un moyen élégant de convertir un stream en String, je fais signe.
Par défaut, il ne semble y avoir que text/plain.
Ils semblent tous dire qu'il faut passer obligatoirement par un stream.
(URL.openStream()).
Si j'arrive à trouver un moyen élégant de convertir un stream en String, je fais signe.
Bon, voilà un truc qui marche, mais c'est vraiment usine à gaz.
Je n'arrive pas à croire qu'on ne puisse pas faire plus simple:
(J'ai utilisé un StringBuffer histoire que la concaténation des chaîne ne soit pas trop pénalisante pour les perfs.)
C'est pas bô. :-(
Je n'arrive pas à croire qu'on ne puisse pas faire plus simple:
URL myURL = new URL("http://ww.blablabla.com");
BufferedReader contentStream = new BufferedReader(new InputStreamReader(myURL.openStream()));
String line;
StringBuffer buffer = new StringBuffer();
while ((line = contentStream.readLine()) != null)
buffer.append(line+"\n");
htmlCode = buffer.toString();
(J'ai utilisé un StringBuffer histoire que la concaténation des chaîne ne soit pas trop pénalisante pour les perfs.)
C'est pas bô. :-(