C'est ce que j'ai mis dans mon code...
Si maintenant tu regardes ce qu'il ya dedans l'arrayList, tu verras que ce sont les address physiques récupéré par l'arp.
Version imprimable
C'est ce que j'ai mis dans mon code...
Si maintenant tu regardes ce qu'il ya dedans l'arrayList, tu verras que ce sont les address physiques récupéré par l'arp.
slt
merci pour ta reponse,ben ta teste ce code et ta recupere les adresses physiques????
l'ArrayList n'est tjr pas reconnue!!!
En employant la méthode de yam's (plus propre que la mienne en effet ;)) dans la méthode que je t'avais donné, ca marche parfaitement, je sais pas ce qu'il te faut de plus...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public static void main(String [] args) { String cmd = "cmd /c arp -a"; try { Runtime r = Runtime.getRuntime(); Process process = r.exec(cmd); String s =null; BufferedReader reader = new BufferedReader(new InputStreamReader( process.getInputStream())); ArrayList<String> physicalAddresses = new ArrayList<String>(); Pattern p = Pattern.compile("([abcdef0-9]{2}-){5}[abcdef0-9]{2}"); while ((s = reader.readLine()) != null) { Matcher m = p.matcher(s); if(m.find()) { physicalAddresses.add(m.group()); } } for(String address : physicalAddresses){ System.out.println(address); } }catch(Exception e) { System.out.println("erreur d'execution " + cmd + e.getMessage()); } }
Qu'est-ce que tu entends exactement par n'est pas reconnue ? Poste le message d'erreur.Citation:
Envoyé par trunks-tr
Curieuse cette synthaxe !Citation:
Envoyé par le y@m's
Je n'avais jamais vu de constructeur d'ArrayList avec des crochets ?!
Ca ne fonctionnerait pas si à la place on écrivait simplement:
??Code:
1
2 ArrayList physicalAddresses = new ArrayList();
Ce ne sont pas des crochets mais des < et > qui sont utilisés, comme tu l'avait justement dit, afin de spécifier le type de donnée contenue dans la liste ; il s'agit des générics disponibles depuis Java 5.0. Pour plus d'info je te renvoie à la FAQ [Java 5.0] Qu'est-ce que les Generics (types paramétrés) ? ;)
Bien sûr que cela fonctionnerait, mais tu perdrais les avantages apportés par l'utilisation des générics (d'ailleurs tu risque d'avoir le warning suivant : [Java 5.0] unchecked : "uses unchecked or unsafe operations").Citation:
Envoyé par Regis.C
voici le message d'erreur :
Invalid expression as statement
puis,il y a une croix rouge sur la ligne qui contient : ArrayList et lorsque je pointe avec la souris sur cette commande,ce message s'affiche :
invalid expression as statement
je bosse sur eclipse 2.1
Je ne bosse pas sur eclipse, mais il semblerai que tu ais une version assez vieille (la version actuelle, sur le site d'eclipse semble être la 3.1.2). Il ce peut que ta version ne reconnaisse pas la syntaxe des générics qui est spécifique à Java 5.
Essaye la syntaxe sans les généricset si tu n'as plus l'erreur c'est que le problème vient effectivement du fait que ta version d'eclipse ne reconnait pas la syntaxe de Java 5. Dans ce cas je ne peus que te conseiller d'installer la dernière version d'eclipse [troll inside] ou bien d'utiliser NetBeans [/troll inside].Code:ArrayList physicalAddresses = new ArrayList();
merci bcp
vous avez raison,maintenant ca a marche:)
mais lorsque j'execute rien ne s'affiche comme resultat,qu'est ce que je devrais regarder ladedans pour recuperer le resulat???
merci bien
Les adresses sont stockées dans ton ArrayList, ensuite tu fait ce que tu veus avec, par exemple pour les énumérer :Plus d'infos sur ArrayListCode:
1
2
3 for(Object address : physicalAddresses) { System.out.println((String) address); }
Je me répète mais je te conseille d'utiliser un IDE qui reconnaisse la syntaxe Java 5 afin de pouvoir utiliser ses fonctionnalités, par exemple pour l'énumération des adresses cela t'évite un transtypage ::Code:
1
2
3 for(String address : physicalAddresses) { System.out.println(address); }
merci pour ton aide
on m'affichais une erreure :
Syntax error on token ":", ";" expected
vous etes sur qu'il y un ":" ou bien c'est a cause de la version d'eclipse?!?!
merci
:oops: Oui, désolé, la syntaxe du for que j'ai utilisée est effectivement une syntaxe Java 5, donc pour toi ça donneCode:
1
2
3 for(int i = 0; i < physicalAddresses.size(); i ++) { System.out.println((String) physicalAddresses.get(i)); }
:oops: je suis vraiment tres desole,je vous avez casse la tete par mes questions
je fais ce que tu m'avais dis,mais on me dit encore :
physicalAddresses cannot be resolved !!!!
je vous remercie infinniment
Tu as du te tromper d'une lettre dans la déclaration de l'ArrayList ou quelque chose du genre, vérifie tes noms de variables. Si tu trouves pas, poste ton code.Citation:
Envoyé par trunks-tr
Cette erreur veut dire que le compilateur ne sait pas ce qu'est physicalAddresses, il y a des chances que ce soit un problème de porté de ta variable physicalAddresses (vérifie que tu ne l'utilise pas hors de sa porté, si tu ne sait pas poste ton code).
En tout cas merci le y@m's pour tes posts qui m'auront permis de me plonger rapidement dans la synthaxe Java 5.0 que je n'avais pas eu le temps de parcourir...
J'ai pu comprendre la nouvelle synthaxe du For (que je ne trouve pas très parlante, mais bon...) et autres nouveautées.
Régis. ;-)
d'accord,voici le code :
merciCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 import java.io.*; import java.util.ArrayList; public class Arp { public static void main(String[] args) { String cmd = "cmd /c arp -a > krl.txt"; try { Runtime r = Runtime.getRuntime(); Process p = r.exec(cmd); String s =null; BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); StringBuffer buffer = new StringBuffer(); boolean start = false; //ArrayList<String> physicalAddresses = new ArrayList<String>(); ArrayList physicalAddresses = new ArrayList(); while ((s = reader.readLine()) != null) {if(start){physicalAddresses.add(s.split(" ")[1]); } if(s.endsWith("Type")){start = true; } } String result = buffer.toString(); //System.out.println(result); }catch(Exception e) { System.out.println("erreur d'execution " + cmd + e.getMessage()); } for(int i = 0; i < physicalAddresses.size(); i ++) { System.out.println((String) physicalAddresses.get(i)); } }}
Il te faut déclarer la variables physicalAddresses avant le bloc try catch, comme ca elle ne sera pas seulement accessible à l'intérieur de celui-ci, mais à l'intérieur de toute la méthode.
Java 5 a effectivement apporté un tas de fonctionnalités dont le nouveau for (équivalent du foreach) qui est vraiment très pratique. Entre le nouveau for, les générics, l'ellipse (nombre d'arguments variable) Java 5 l'essayer c'est l'adopter :D.Citation:
Envoyé par Regis.C
trunks-tr, comme je le pensais c'est une erreur de porté de ta variable. La portée d'une variable se limite au bloc où elle a été déclarée. Dans ton cas tu déclare ton ArrayList à l'intérieur d'un bloc try, donc dès que tu sors de ce bloc ta variable n'est plus valide.
Comme l'a dit wichtounet il te suffit de déclarer ton ArrayList avant le try.
merci,ya plus d'erreur,j'ai recompile puis executer,mais il affiche rien,pourtant il doit afficher ce que contient ArrayList n'est ce pas???