использование runtime.exec() на языке java для выполнения файла C

Я пишу программу на Java и в какой-то момент хочу выполнить программу на C (уже написанную кем-то другим) с помощью метода runtime.exec().

Программа на C принимает два параметра на вход и выдает один на выходе. Поэтому, когда я запускаю его в терминале, я пишу (/имя исполняемого файла/) param1 param2 result

Программа использует два параметра для вычисления результата. Более конкретно: param1 и param2 являются изображениями и каким-то образом "сравнивают"/"объединяют" их и создают новое четкое изображение (файл bmp), называя его результатом, это для медицинских изображений и биомедицинских целей. Я не писал код для этой программы, и она сложная, поэтому я хочу выполнить ее через java. Если я могу это сделать, мне не нужно понимать, как работает программа на C. Все, что мне нужно сделать, это узнать, как выполнить его, запустив мою программу Java.

Могу ли я использовать метод runtime.exec() в java для выполнения (незнакомой мне) программы, написанной на C.

Если да, я также хотел бы знать, как вводить входные данные (param1 и param2), а также как получить вывод (результат) для дальнейшего использования в моем Java-коде.


person eliodorou    schedule 22.03.2016    source источник
comment
Во-первых: вы не запускаете исходный код C. Вы запускаете компилятор C; который создает вам двоичный исполняемый файл. И что вы можете вызывать из java, используя его исполняющую функцию exec(), как и вызов любого другого бинарного файла.   -  person GhostCat    schedule 22.03.2016
comment
ок круто так как мне это сделать? что за командная строка?   -  person eliodorou    schedule 22.03.2016
comment
На самом деле вы должны сделать некоторые предварительные исследования. Есть хорошие учебники; и довольно много вопросов с хорошими ответами на этом сайте. Как вы думаете, почему именно вам нужен кто-то, кто объяснит то, что уже неоднократно документировалось?   -  person GhostCat    schedule 22.03.2016


Ответы (1)


Да, таким образом вы можете запустить любой исполняемый файл, а также передать параметры командной строки. Совершенно не важно, на каком языке написана программа.

result на самом деле не выход, а имя выходного файла, которое вы также должны указать в своем вызове.

Итак, вы должны написать что-то вроде:

Runtime.exec("programName image1.bmp image2.bmp result.bmp");

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

person Frank Puffer    schedule 22.03.2016
comment
мне нужно как-то перейти в папку, где находятся исполняемый файл и два изображения? так же, как я делаю в терминале? (кд ./дом/и т.д.) - person eliodorou; 22.03.2016
comment
@eliodorou: Это была бы одна из возможностей. Но вы также можете попытаться выяснить, принимает ли программа пути к входным файлам. - person Frank Puffer; 22.03.2016
comment
См. также Когда Runtime.exec () не будет для многих полезных советов по правильному созданию и управлению процессом (включая чтение выходных потоков). Затем игнорируйте ссылку на exec и используйте ProcessBuilder для создания процесса. Также разбейте String arg на String[] args, чтобы упростить учет путей или аргументов, содержащих пробелы. - person Andrew Thompson; 23.03.2016