it-swarm.com.ru

Как выполнить команды Windows, используя Java - Изменить настройки сети

В 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);
        }
    }
}
41
mre
Runtime.getRuntime().exec("netsh");

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

Правка: более поздний ответ leet предполагает, что этот процесс в настоящее время не рекомендуется. Однако, согласно комментарию DJViking, это не так: документация по Java 8 . Метод не рекомендуется.

35
badroit

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

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

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

2
Anubis05
2
Matt Ball