Ниже приведу простой пример использования ProcessBuilder с комментариями.
import java.io.*;
public class ExternalProgramLauncher {
public static void main(String[] args)
throws IOException, InterruptedException {
// указываем в конструкторе ProcessBuilder,
// что нужно запустить программу ls с параметрами -l /dev
ProcessBuilder procBuilder = new ProcessBuilder("ls","-l","/dev");
// перенаправляем стандартный поток ошибок на
// стандартный вывод
procBuilder.redirectErrorStream(true);
// запуск программы
Process process = procBuilder.start();
// читаем стандартный поток вывода
// и выводим на экран
InputStream stdout = process.getInputStream();
InputStreamReader isrStdout = new InputStreamReader(stdout);
BufferedReader brStdout = new BufferedReader(isrStdout);
String line = null;
while((line = brStdout.readLine()) != null) {
System.out.println(line);
}
// ждем пока завершится вызванная программа
// и сохраняем код, с которым она завершилась в
// в переменную exitVal
int exitVal = process.waitFor();
}
}
Часть вывода программы:
итого 0 crw-rw---- 1 root root 10, 54 Сен 17 12:38 autofs crw-rw---- 1 root root 10, 63 Сен 18 00:38 binder drwxr-xr-x 2 root root 520 Сен 21 15:35 block drwxr-xr-x 2 root root 60 Сен 21 15:35 bsg drwxr-xr-x 3 root root 60 Сен 18 00:38 bus
В данном примере не требуется редактировать переменные окружения, указывать полный путь к программе ls или рабочий каталог, т.к. java по умолчанию имеет доступ к системной переменной окружения PATH, которая содержит каталог /bin, но если вы запускаете какую-то программу из какого-то своего каталога, то что-либо из вышеперечисленного сделать придется.
Обязательно (!) следует вызывать метод process.waitFor(), иначе ваша программа может завершиться до того как завершится внешняя, и прихлопнет этот запущенный ею процесс.
Простой и понятный пример, демонстрирующий работу с переменными окружения и установку рабочего каталога приведен в документации к Java Platform SE 6:
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
// получаем окружение
Map<String, String> env = pb.environment();
// добавляем новую переменную VAR1 со значением myValue
env.put("VAR1", "myValue");
// удаляем переменную OTHERVAR
env.remove("OTHERVAR");
// добавляем переменную VAR2 используя значение
// переменной VAR1
env.put("VAR2", env.get("VAR1") + "suffix");
// устанавливаем рабочий каталог
pb.directory(new File("myDir"));
// запускаем программу
Process p = pb.start();
Добрый день! Скажите, а как можно запустить стороннюю программу
ОтветитьУдалитьа. под Linux в Java
б. ,которая была написана под windows с использованием .Net
короче, все тоже самое, что у Вас, только приложение Windows с двумя аргументами (входной/выходной) файл.
Заранее огромное спасибо, если есть возможность, ответьте на мой e-mail...(antonermak@inbox.ru)
Честно говоря, уже все перепробовал...
Спасибо, подробно и доходчиво ...
ОтветитьУдалить