Esecuzione dei comandi di Windows tramite Java: modifica delle impostazioni di rete

In Java, voglio essere in grado di eseguire un comando di Windows.

Il comando in questione è netsh . Questo mi consentirà di impostare / ripristinare il mio indirizzo IP.

Si noti che non voglio eseguire un file batch.

Invece di usare un file batch, voglio eseguire direttamente tali comandi. È ansible?


Ecco la mia soluzione implementata per riferimento futuro:

 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); } } } 

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

Vedi Runtime Javadoc.

EDIT: una successiva risposta di leet suggerisce che questo processo è ora deprecato. Tuttavia, come da commento di DJViking, questo non sembra essere il caso: documentazione di Java 8 . Il metodo non è deprecato.

Usa 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(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(); } } 

Questo funziona.

È ansible eseguire il comando con Runtime.getRuntime().exec("") (ad es. Runtime.getRuntime().exec("tree") ). Ma questo eseguirà solo eseguibili trovati nel percorso, non comandi come echo , del , … Ma solo cose come tree.com , netstat.com , … Per eseguire comandi regolari, dovrai mettere cmd /c prima il comando (es. Runtime.getRuntime().exec("cmd /c echo echo") )

Runtime#exec() .