Java исполняет программу командной строки - PullRequest
6 голосов
/ 19 февраля 2012

У меня небольшая проблема с запуском инструмента командной строки.Я хочу выполнить UnRAR.exe из WinRAR.Я делаю это так:

Process process = runtime.exec("\"" + unrarPath + "\"" + " x -kb -vp " + "\"" + fileName + "\"", null, f.getParentFile());

Моя проблема в том, что сжатый файл защищен паролем.Если я выполню команду в своей консоли, меня попросят ввести пароль.Если я позволю Java выполнить его, программа просто завершится и никогда не будет ждать ввода пользователя (пароля).

Я пытался записать в выходной поток процесса, но это не сработало.Что мне нужно знать о поведении программ командной строки, выполняемых в «разных» средах?

РЕДАКТИРОВАТЬ: Может быть, я не достаточно ясноУ меня вопрос: Возможно ли взаимодействие с программой командной строки с Java?

Ответы [ 2 ]

11 голосов
/ 23 июля 2012

У меня работает. Возможно, вы не написали новую строку и не очистили поток?

Process tr = Runtime.getRuntime().exec( new String[]{ "cat" } );
Writer wr = new OutputStreamWriter( tr.getOutputStream() );
BufferedReader rd = new BufferedReader( new InputStreamReader( tr.getInputStream() ) );
wr.write( "hello, world\n" );
wr.flush();
String s = rd.readLine();
System.out.println( s );

http://ideone.com/OUGYv

+ 1 к вашему вопросу, java.lang.Process было то, что я искал!

0 голосов
/ 27 февраля 2013

Существует несколько способов запуска процесса и взаимодействия с ним.

В Java есть класс Process. Это позволяет получить все 3 потока подпроцесса (процесс, вызываемый вашим Java-приложением).

Класс процесса в справке Java: ссылка

Здесь вы можете найти несколько примеров кода, который выполняет процесс в Java: ссылка

Однако данные из потоков вывода и ошибок будут доступны вам после завершения процесса (ваша программа будет «остановлена» на линии с помощью метода .exec () до завершения подпроцесса).

Для взаимодействия с запущенным процессом вы должны использовать другой поток.

Использование потока для захвата результатов процесса

Взаимодействие с другим процессом Java

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