IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

comment recuperer le resultat d'une commande dos en java?


Sujet :

Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut comment recuperer le resultat d'une commande dos en java?
    salut tout le monde
    ben mon objectif c'est de pouvoir recuperer le resultat d'une commande dos (exemple: ping, arp -a...) et d'extraire une partie de ce resultat que je l'ai fais rediriger vers un fichier texte et de mettre cette partie dans une valeure dont j'en aurrai besoin pour la comparer avec une autre valeur que je compte la recuperer a partir d'une base de donnees.
    ben voici le bout de code que je viens de tapper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import java.io.*; 
    public class DosQuery {  
    public static void main(String[] args) { 
     
    String cmd; 
    cmd = "cmd /c ping localhost > trunks.txt "; 
     
    try { 
    Runtime r = Runtime.getRuntime(); 
    Process p = r.exec(cmd); 
     
    InputStream i_stream = p.getInputStream(); 
    InputStreamReader reader = new InputStreamReader(i_stream);  
     
    InputStream out = new BufferedInputStream(p.getInputStream());  
     
    String s =null; 
     
    BufferedReader bf_reader= new BufferedReader(reader);  
    while ((s = bf_reader.readLine()) != null) { 
    byte[] b = new byte[1024];  
    int n = out.read(b); 
    for(int i=0; i<n; i++)  
    System.out.print((char)b[i]); 
    } 
     
    p.waitFor();//si l'application doit attendre a ce que ce process fini 
     
    }catch(Exception e) { 
    System.out.println("erreur d'execution " + cmd + e.getMessage()); 
    } 
    }  
    }
    ce qu'il reste a faire alors c'est d'extraire une partie du resultat de ping qui a ete redirige vers le fichier "trunks.txt" et la mettre dans une variable.
    j'espere que ma demande est bien claire .
    Si vous avez une idee n'hesitez pas a m'aider.
    Merci

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je comprends pas tout à ton code, c'est un peu le fouillis, par exemple, pourquoi tu récupères 2 fois l'inputStream dans des variables différentes ?

    Ensuite, pourquoi tu récupères pas le texte qu'il y a dans le fichier, ou alors pourquoi tu stockes dans un fichier... Je vois pas pourquoi tu fais les 2 en même temps

    En plus, dans ta boucle, tu stockes la ligne dans s, mais tu n'emploies plus du tout s...

    Je crois que tu as mélangé 2 facon de faire...

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut comment recuperer le resultat d'une commande dos en java?
    merci pour votre reponse
    oui vous avez raison.en fait je suis debutant en java,et comme je suis presse j'ai recherche un code et j'ai trouve celui que vous venez de critiquer
    svp si vous avez une autre facon de faire je serai rconnaissant
    merci bcp

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je sais pas si ma technique est la meilleure, mais là voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    String cmd = "cmd /c ping 127.0.0.1"; 
     
    		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();
     
    			while ((s = reader.readLine()) != null) { 
    				 buffer.append(s);
    			} 
     
    			String result = buffer.toString();
     
    		}catch(Exception e) { 
    				System.out.println("erreur d'execution " + cmd + e.getMessage()); 
    		}
    Ensuite, si tu as besoin de récupérer une donnée en particulier, soit tu parses result, soit tu prends tes données directement dans la boucle

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut comment recuperer le resultat d'une commande dos en java?
    ok,merci bien pour ton aide,je vais essayer
    merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut comment recuperer le resultat d'une commande dos en java?
    Merciiiiii bien,ca a marche,voici ce que j'ai obtenu,lorsque j'ai execute la commande arp -a > krl.txt

    Interfaceÿ: 0.0.0.0 --- 0x2
    Adresse Internet Adresse physique Type
    157.55.85.12 f0-aa-00-62-c6-09 statique
    157.55.85.212 00-aa-00-62-c6-09 statique
    ce que je veux faire avec c'est lire l'adresse physique et la mettre dans une variable.
    pourriez vous m'y aider?j'en ai vraiment besoin
    merci bcp pour votre aide

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Ce que tu peut faire, c'est quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    boolean start  = false;
    ArrayList<String> physicalAddresses = new ArrayList<String>();
    while ((s = reader.readLine()) != null) { 
    <div style="margin-left:40px">if(start){
    <div style="margin-left:40px">physicalAddresses.add(s.split(" ")[1]);</div>}
     
    if(s.endsWith("Type")){
    <div style="margin-left:40px">start = true;</div>}</div>}
    Dis moi si tu comprends pas quelque chose et aussi si ca marche pas, car j'ai pas testé

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut comment recuperer le resultat d'une commande dos en java?
    merci pour ta reponse
    ben araylist n'est pa reconnue,faut il importer une classe??
    sinon,dis moi stp ,le code que tu viens de me filer sert a extraire l'adresse physique?ce que j'aimerai avoir c'est de copier, l'adresse physique contenue dans le fichier texte qui contient le resultat de la commande arp -a,dans une autre variable.
    excuse moi si je t'ai casse la tete par mes questions,je viens de commencer en java.
    merci pour ton aide

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import java.util.ArrayList;

  10. #10
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par trunks-tr
    merci pour ta reponse
    ben araylist n'est pa reconnue,faut il importer une classe??
    sinon,dis moi stp ,le code que tu viens de me filer sert a extraire l'adresse physique?ce que j'aimerai avoir c'est de copier, l'adresse physique contenue dans le fichier texte qui contient le resultat de la commande arp -a,dans une autre variable.
    excuse moi si je t'ai casse la tete par mes questions,je viens de commencer en java.
    merci pour ton aide
    Avec le code que je t'ai fourni plus haut, je ne stocke plus rien dans un fichier, j'extrais directements les données du flux. En fait je parcours chaque ligne et si la ligne finis par Type, ca veut dire que la ligne suivante est une ligne contenant une addresse physique et donc, je stocke cette addresse physique dans la liste.

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut
    j'ai toujours le meme probleme,meme apres avoir ajoute la ligne :import java.util.ArrayList;
    ArrayList n'est pas reconnue!!!!
    sinon est ce que tu pourrais faire une copier coller du code complet stp car lorsque tu 'avais file le deuxieme code je sais pas ce que je devrais effacer dans le premier code.
    merci

  12. #12
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    La compilation se fait avec quelle version du JDK?
    Supérieure à 1.2?

  13. #13
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par trunks-tr
    j'ai toujours le meme probleme,meme apres avoir ajoute la ligne :import java.util.ArrayList;
    ArrayList n'est pas reconnue!!!!
    sinon est ce que tu pourrais faire une copier coller du code complet stp car lorsque tu 'avais file le deuxieme code je sais pas ce que je devrais effacer dans le premier code.
    merci
    Tu ne dois rien effacer, il te faut remplacer la première boucle while par la seconde, et eventuellement effacer, le StringBuffer si tu n'as pas besoin du résultat complet.

  14. #14
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par wichtounet
    Ce que tu peut faire, c'est quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    boolean start  = false;
    ArrayList<String> physicalAddresses = new ArrayList<String>();
    while ((s = reader.readLine()) != null) {<div style="margin-left:40px">if(start){<div style="margin-left:40px">physicalAddresses.add(s.split(" ")[1]);</div>}
     
    if(s.endsWith("Type")){<div style="margin-left:40px">start = true;</div>}</div>}
    Je pense qu'il serait plus simple d'utiliser un Matcher et un Pattern :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    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());
         }
    }

  15. #15
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut
    je bosse avec jre 1.5.0_06,je sais pas prq cette methode n'est pas reconnue!!!

  16. #16
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut
    j'ai essaye ton nouveau code mais ArrayListe n'est pas reconnue!!! c'est etonnant?est ce a cause de le version jre 1.5???

  17. #17
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 815
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 815
    Points : 7 644
    Points
    7 644
    Par défaut
    Citation Envoyé par trunks-tr
    j'ai essaye ton nouveau code mais ArrayListe n'est pas reconnue!!! c'est etonnant?est ce a cause de le version jre 1.5???
    Non, tu as dû faire une boulette...
    Montre ton code, ça ira plus vite...

    Et c'est ArrayList... sans le "e" à la fin...

  18. #18
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par trunks-tr
    je bosse avec jre 1.5.0_06,je sais pas prq cette methode n'est pas reconnue!!!
    Parce que je pense que tu as copié directement le code posté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<String> physicalAddresses = new ArrayList<String>();
    alors que je pense que le <String> n'est là que pour t'indiquer que c'est une liste de String.
    Regarde dans la javadoc le constructeur de ArrayList.

  19. #19
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Citation Envoyé par Regis.C
    Parce que je pense que tu as copié directement le code posté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<String> physicalAddresses = new ArrayList<String>();
    alors que je pense que le <String> n'est là que pour t'indiquer que c'est une liste de String.
    Regarde dans la javadoc le constructeur de ArrayList.
    La classe ArrayList possédant un constructeur par défaut, cette ligne de code est correct. Comme l'a dit plegat, je pense que trunks-tr a une "boulette" dans son code.

  20. #20
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 31
    Points : 8
    Points
    8
    Par défaut
    salut tout le monde
    merci pour vos reponses,ben voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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();
     
    //while ((s = reader.readLine()) != null) { 
    //	 buffer.append(s);
    //} 
     
    boolean start  = false;
    ArrayList<String> physicalAddresses = new ArrayList<String>();
    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()); 
    			}
    }}
    avant que j'ajoute ArrayListe,voici ce que j'avais obtenu,c.a.d le resultat de la commande arp -a que j'avais redirige vers le fichier :"krl.txt"

    Interfaceÿ: 0.0.0.0 --- 0x2
    Adresse Internet Adresse physique Type
    157.55.85.12 f0-aa-00-62-c6-09 statique
    Alors ce qu'il reste a faire c'est de recupere l'adresse physique et la mettre dans une variable,j'espere que c'est faisable
    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Comment récupérer le résultat d'une requête dans un tableau ?
    Par Kylen dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/06/2006, 19h32
  2. Réponses: 2
    Dernier message: 27/02/2006, 15h59
  3. Comment insérer le résultat d'une commande avec vim
    Par zelda dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 28/12/2005, 09h32
  4. Réponses: 22
    Dernier message: 09/12/2005, 21h27
  5. Recuperer le resultat d'une commande
    Par vbcasimir dans le forum Linux
    Réponses: 2
    Dernier message: 08/12/2005, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo