Вернуть Windows cmd текст из Java? - PullRequest
0 голосов
/ 04 ноября 2011

Я хочу вернуть тот же текст, который возвращается, когда я вручную набираю команду в командной строке cmd в Windows.Вот пример, который не работает.

import java.io.IOException;

public class Test {

    public static void main(String[] args) throws IOException {
        String g = "";
        Runtime.getRuntime().exec(new String[] {"ipconfig", g});  
        System.out.println(g);
    }
}

Я не знаю, стоит ли мне смотреть на Runtime.getRuntime()exec, потому что, как я понимаю, API (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html) - это то, что во всех примерах exec, ни один не возвращаетстрока.Возвращаемое значение (если я правильно понимаю) для некоторых на самом деле является «процессом», который я могу только угадать означает, что ничего не возвращается, но процесс запущен.В этом примере я использовал ipconfig, но на самом деле мне нужно запустить различные диагностические команды и проанализировать строку (которую я назвал «приглашение cmd»).

Ответы [ 3 ]

2 голосов
/ 04 ноября 2011

Чтобы получить выходные данные команды, вы можете использовать это:

Process p = Runtime.getRuntime().exec(new String[] {"ipconfig", g});
InputStream s = p.getInputStream();

BufferedReader in = new BufferedReader(new InputStreamReader(s));
String temp;

while ((temp = in.readLine()) != null) {
    System.out.println(temp);
}

Обратите внимание, что метод readLine () не будет блокироваться, пока не будет прочитан ввод или процесс не будет завершен.

2 голосов
/ 04 ноября 2011

Строка Java является неизменной, это означает, что "", на который ссылается g, никогда не изменится. Никакой код, который не выполняет присваивание g, никогда не будет печатать что-либо кроме пустой строки в System.out.

Вместо использования Runtime.exec я рекомендую использовать библиотеку Commons-Exec из проекта Apache Commons. Он предоставляет намного более надежных средств для выполнения внешних приложений (надежная передача аргументов и предотвращение таких вещей, как непрочитанный поток вывода, блокирующий программу).

Вы можете захватить вывод команды, используя PumpStreamHandler и поток ввода по вашему выбору.

1 голос
/ 04 ноября 2011

Если вы посмотрите на уже опубликованную ссылку javadoc, вы увидите, что Runtime.exec() возвращает объект Process, а класс Process имеет метод getOutputStream() чтобы получить стандартный поток вывода нового процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...