Résultats de 1 à 2 sur 2

Sujet : [java][Runtime] exécuter une commande

  1. #1
    Membre MP
    Inscrit
    août 2013
    Messages
    1 823

    [java][Runtime] exécuter une commande

    [java][Runtime] exécuter une commande Windows et récupération de paramètres

    Un sujet souvent demandé sur MoteurProg

    Comment lancer une application Windows avec Java et comment récupérer les informations d\'une commande Shell ?

    commençons par examiner le code capable de lancer une application Win valide. Ici c\'est le notepad qui va faire les frais de notre test

    Code:
    /*
     * executerW32.java Created on 15 juin 2004
     */
    import java.io.IOException;
    
    /**
     * @author : Zeb
     * contact : zebpm@hotmail.com
     * le : 15 juin 2004 à : 12:24:21
     * Fichier : executerW32.java
     * Package : 
     * Projet : MProg
     *
     */
    public class executerW32 {
    
        public static void main(String[] args) {
            try {
              Runtime.getRuntime().exec(\"C:/WINDOWS/NOTEPAD.EXE\");
            } catch (IOException e) {
              System.out.println(\"Exception : \" + e.getMessage());
            }    
    
        }
    }
    A l\'exécution, une fenêtre Notepad est ouverte avec un texte vierge.
    Il aurait été possible de passer un document au Notepad durant la séquence d\'ouverture pour lui préciser de l\'ouvrir.
    Complétons l\'argument passé a la fonction exec comme suit :

    Runtime.getRuntime().exec(\"C:/WINDOWS/NOTEPAD.EXE c:/access.log\");

    Dans la mesure ou un fichier baptisé \'access.log\' se trouve bien sur la racine du disque C, vous verrez apparaître le Notepad avec le contenu du fichier.

    Nous aurions pu tout aussi bien utiliser Word pour ce test :

    Runtime.getRuntime().exec(\"C:/Program Files/Microsoft Office/Office/winword.exe c:/access.log\");

    Maintenant qu\'en est il des applications qui renvoient des paramètres ? Nous allons donc nous pencher sur une commande Shell Windows et essayer de récupérer les paramètres qu\'elle nous renvoie. Pour ce test nous enverrons un ping et nous lirons en retour les informations qu\'il nous donne.

    examinons le code suivant :

    Code:
    /*
     * executerW32.java Created on 15 juin 2004
     */
    import java.io.*;
    
    /**
     * @author : Zeb
     * contact : zebpm@hotmail.com
     * le : 15 juin 2004 à : 12:24:21
     * Fichier : executerW32.java
     * Package : 
     * Projet : MProg
     *
     */
    public class TestPing {    
        public static void main(String[] args) {
            try {
                Process p = null;
                Runtime rt = Runtime.getRuntime();
                p = rt.exec(\"ping 217.128.39.79\");
                java.io.BufferedReader br= new java.io.BufferedReader( new InputStreamReader(p.getInputStream()));
                String s = null;
                while ((s = br.readLine()) != null)
                    System.out.println(s);
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    nous retrouvons notre méthode \'exec\' avec la commande ping suivie d\'un argument correspondant à l\'adresse IP que nous souhaitons contacter.
    Un \'BufferedReader\' est instancié dans la foulée avec comme argument un \'InputStremreader\' sur le process nouvellement crée (notre Ping).
    la boucle \'while\' va ensuite procéder à la lecture ligne par ligne des informations que nous renvoient la commande.

    Le résultat de cette commande donnera un affichage similaire a celui ci sur la console :

    Envoi d\'une requête \'ping\' sur 217.128.39.79 avec 32 octets de données :

    Réponse de 217.128.39.79 : octets=32 temps<1ms TTL=128
    Réponse de 217.128.39.79 : octets=32 temps<1ms TTL=128
    Réponse de 217.128.39.79 : octets=32 temps<1ms TTL=128
    Réponse de 217.128.39.79 : octets=32 temps<1ms TTL=128

    Statistiques Ping pour 217.128.39.79:
    Paquets : envoyé = 4, reçus = 4, perdus = 0 (perte 0%),

    Duré approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms



    la méthode runtime nous permet de plus d\'obtenir quelques informations supplémentaires sur la mémoire ou le nombre de processeurs.
    Les fonctions suivantes donnent donc l\'affichage suivant.

    System.out.println(\"availableProcessors : \" + rt.availableProcessors());
    System.out.println(\"freeMemory : \" + rt.freeMemory());
    System.out.println(\"maxMemory : \" + rt.maxMemory());
    System.out.println(\"totalMemory : \" + rt.totalMemory());


    availableProcessors : 1
    freeMemory : 1739880
    maxMemory : 134217728
    totalMemory : 2031616




    je finirai par la fonction \'exitValue()\' qui si tous c\'est bien passé renverra 0.

    Le lien qui va bien (merci Gexti) :

    http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html


    Merci de votre lecture et a bientôt sur MoteurProg. :wink:

  2. #2
    Visiteur MP
    Visiteur MP
    [col=#FF0000]Merci de poser vos questions dans un nouveau TOPIC, celui-ci appartient à la FAQ java.
    Les remarques les plus intéressentes seulement y seront ajoutées.[/col]

Informations du sujet

Utilisateur(s) parcourant ce sujet

il y a actuellement 1 utilisateur(s) parcourant ce sujet. (0 membre(s) et 1 visiteur(s))

Règles des messages

  • Vous ne pouvez pas créer de sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas éditer vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Please disable Adblock!