Java запускает команду командной строки Windows, возвращающую значение

Я хотел бы запустить команду командной строки Windows из java и вернуть результат в java. Это возможно?

например, я хотел бы сделать следующее

Object returnValue = runOnCommandLine("ЦП wmic получает LoadPercentage"); //В данном случае returnValue — это процент загрузки процессора в виде строки

Изменить: я смог заставить это работать

InputStream inputStream = new ProcessBuilder("wmic", "cpu", "get", "status").start().getInputStream();
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer);
String theString = writer.toString();
System.out.println("My string: " + theString);

person sworded    schedule 06.02.2013    source источник
comment
Взгляните на это и это и это   -  person MadProgrammer    schedule 07.02.2013
comment
Или проверьте javaevangelist.blogspot.nl /2011/12/   -  person Sebastiaan van den Broek    schedule 07.02.2013


Ответы (3)


Данные, которые вам нужны, это commandOutput.

    String cmd = "wmic cpu get LoadPercentage";
    ProcessBuilder pb = new ProcessBuilder(cmd);
    pb.redirectErrorStream(true);
    Process p = pb.start();
    BufferedReader stdin = new BufferedReader(
                          new InputStreamReader(p.getInputStream()));
    StringBuilder commandOutput = new StringBuilder();
    String line;
    while ((line = stdin.readLine()) != null) {
      commandOutput.append(line);
    }
    int exitValue = -1;
    try {
     exitValue = p.waitFor();
    } catch (InterruptedException e) {
    // do something here   
    }
person Andrey Svirsky    schedule 06.02.2013

Вы можете сделать следующее:

        Process proc = Runtime.getRuntime().exec("net start");          
        InputStreamReader isr = new InputStreamReader(proc.getInputStream());
        BufferedReader br = new BufferedReader(isr);

        String temp = null;
        while (( temp = br.readLine() ) != null)
               System.out.println(temp);
person buxter    schedule 06.02.2013

Загляните в ProcessBuilder.

Ниже использовалась Java 1.5 Runtime.getRuntime().exec(...).

person thatidiotguy    schedule 06.02.2013
comment
Гораздо проще использовать ProcessBuilder — решает многие из распространенных ошибок, которые люди совершают с Runtime#exec - ИМХО - person MadProgrammer; 07.02.2013
comment
@MadProgrammer Похоже, Oracle говорит то же самое в документах. ProcessBuilder предпочтительнее в версии 1.5 и выше. Спасибо за информацию. - person thatidiotguy; 07.02.2013