Выполнение команд Windows с помощью Java - изменение настроек сети

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

Соответствующая команда netsh. Это позволит мне установить /reset мой 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);
        }
    }
}

Ответ 1

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

См. Runtime Javadoc.

EDIT: более поздний ответ leet предполагает, что этот процесс теперь устарел. Однако, по комментариям DJViking, это выглядит не так: Документация по Java 8. Этот метод не устарел.

Ответ 2

Используйте 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.
}

Ответ 3

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

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

Ответ 5

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