Как выполнить команды Windows с помощью Java - изменить настройки сети - PullRequest
40 голосов
/ 18 августа 2011

В Java я хочу иметь возможность выполнять команду Windows.

Командой, о которой идет речь, является netsh. Это позволит мне установить / сбросить мой IP-адрес.

Обратите внимание, что я не хочу выполнять командный файл.

Вместо того, чтобы использовать командный файл, я хочу выполнять такие команды напрямую. Возможно ли это?


Вот мое реализованное решение для будущего:

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

Ответы [ 5 ]

35 голосов
/ 18 августа 2011
Runtime.getRuntime().exec("netsh");

См. Время выполнения Javadoc.

РЕДАКТИРОВАТЬ: более поздний ответ leet предполагает, что этот процесс в настоящее время не рекомендуется. Однако, согласно комментарию DJViking, это не так: документация по Java 8 . Метод не рекомендуется.

27 голосов
/ 01 июля 2013

Использование 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.
}
5 голосов
/ 05 июля 2017

Вы можете запустить команду с помощью Runtime.getRuntime().exec("<command>") (например, Runtime.getRuntime().exec("tree")). Но это будет запускать только исполняемые файлы, найденные в path, а не такие команды, как echo, del, ... Но только такие вещи, как tree.com, netstat.com, ... Для запуска обычных команд вам нужно будет поставить cmd /c перед командой (например, Runtime.getRuntime().exec("cmd /c echo echo"))

2 голосов
/ 18 августа 2011
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();
    }
}

Это работает.

2 голосов
/ 18 августа 2011
...