Comment exécuter des commandes Windows en utilisant Java – Modifier les parameters 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 de commandes.

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


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

 public class JavaRunCommand { private static final Ssortingng 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(Ssortingng 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 Ssortingng 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); } } } 

 Runtime.getRuntime().exec("netsh"); 

Voir Javadoc à l’ exécution .

EDIT: Une réponse plus tard par leet suggère que ce processus est maintenant obsolète. Cependant, selon le commentaire de DJViking, cela ne semble pas être le cas: la documentation Java 8 . La méthode n’est pas obsolète.

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. } 
 public static void main(Ssortingng[] args) { Ssortingng 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())); Ssortingng s; while ((s = reader.readLine()) != null){ System.out.println("The inout stream is " + s); } } catch (IOException e) { e.printStackTrace(); } } 

Cela marche.

Runtime#exec() .

Vous pouvez exécuter la commande avec Runtime.getRuntime().exec("") (par exemple, Runtime.getRuntime().exec("tree") ). Mais, cela exécutera seulement les exécutables trouvés dans le chemin, pas les 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") )