46 votes

Comment exécuter des commandes Windows à l'aide de Java - Modifier les paramètres réseau

En Java, je veux pouvoir exécuter une commande Windows.

La commande en question est netsh . Cela me permettra de définir/réinitialiser mon adresse IP.

Notez que je ne veux pas exécuter un fichier batch.

Au lieu d'utiliser un fichier batch, je souhaite exécuter ces commandes directement. Est-ce possible?


Voici ma solution implémentée pour référence future :

 public class JavaRunCommand {
    private static final String CMD = 
        "netsh int ip set address name = \"Local Area Connection\" source = static addr = 192.168.222.3 mask = 255.255.255.0";
    public static void main(String args[]) {

        try {
            // Run "netsh" Windows command
            Process process = Runtime.getRuntime().exec(CMD);

            // Get input streams
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

            // Read command standard output
            String s;
            System.out.println("Standard output: ");
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }

            // Read command errors
            System.out.println("Standard error: ");
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }
}

42voto

badroit Points 486
Runtime.getRuntime().exec("netsh");

Voir Runtime Javadoc.

EDIT : une réponse ultérieure de leet suggère que ce processus est désormais obsolète. Cependant, selon le commentaire de DJViking, cela ne semble pas être le cas : documentation Java 8 . La méthode n'est pas obsolète.

31voto

leet Points 347

Utiliser ProcessBuilder

 ProcessBuilder pb=new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process process=pb.start();
BufferedReader inStreamReader = new BufferedReader(
    new InputStreamReader(process.getInputStream())); 

while(inStreamReader.readLine() != null){
    //do something with commandline output.
}

6voto

Marko Zajc Points 180

Vous pouvez exécuter la commande avec Runtime.getRuntime().exec("<command>") (par exemple, Runtime.getRuntime().exec("tree") ). Mais, cela n'exécutera que les exécutables trouvés dans le chemin, pas des commandes comme echo , del , ... Mais seulement des choses comme tree.com , netstat.com , ... Pour exécuter des commandes régulières, vous devrez mettre cmd /c avant la commande (par exemple Runtime.getRuntime().exec("cmd /c echo echo") )

3voto

ganguly.sarthak Points 352
public static void main(String[] args) {
    String command="netstat";
    try {
        Process process = Runtime.getRuntime().exec(command);
        System.out.println("the output stream is "+process.getOutputStream());
        BufferedReader reader=new BufferedReader( new InputStreamReader(process.getInputStream()));
        String s; 
        while ((s = reader.readLine()) != null){
            System.out.println("The inout stream is " + s);
        }                   
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Cela marche.

2voto

Matt Ball Points 165937

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X