web-dev-qa-db-fra.com

Comment exécuter les 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 veux 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);
        }
    }
}
41
mre
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 déconseillée.

35
badroit

Utilisez 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.
}
28
leet

Vous pouvez exécuter la commande avec Runtime.getRuntime().exec("<command>") (par exemple. Runtime.getRuntime().exec("tree")). Mais, cela exécutera uniquement les exécutables trouvés dans path, pas les commandes comme echo, del, ... Mais seulement des trucs 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"))

5
Marko Zajc
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.

2
Anubis05
2
Matt Ball