Проблема с запуском команды DOS в Java - PullRequest
0 голосов
/ 12 января 2011

Дорогие все Я хочу выполнить EXE-файл на Java, но я не смог сделать это правильно. Первоначально в командной строке DOS моя команда выглядит так:

C:>\crf_test.exe model <inputfile.txt> outputfile.txt

Примечание: имя входного файла должно быть в скобках <>. Он всегда давал мне хорошие результаты, когда запускал его в окне DOS.

Когда я хочу, чтобы моя Java-программа вызывала вышеуказанную команду, я делаю это так:

Process p = Runtime.getRuntime().exec("crf_test.exe model <inputfile.txt> outputfile.txt");

Однако, вывод этой команды - «нет такого файла или каталога:» Мне гостевая Java не нравится скобки <> в команде DOS. Я также удаляю <>, но exe-файл не принял это. Итак, как я могу справиться с этой проблемой? Пожалуйста, дайте мне решение Большое спасибо

Ответы [ 5 ]

4 голосов
/ 12 января 2011

Возможны две проблемы. Во-первых, тот, о котором упоминали другие, - crf_test.exe, может не оказаться на вашем пути. Трудно сказать, выводится ли у вас «нет такого файла или каталога» из crf_test.exe или из Java, пытаясь найти crf_test.exe.

Во-вторых, запустив его из DOS, вы не на самом деле заключаете имя файла в скобки - вы перенаправляете системный ввод с входного файла на выходной файл, поэтому логическая группировка:

crf_test.exe model     < inputfile.txt     > outputfile.txt

Теперь, когда вы запускаете его из Java, он искренне пытается передать <inputfile.txt> в качестве второго аргумента командной строки и outputfile.txt в качестве третьего. Я предполагаю, что crf_test.exe затем пытается загрузить их как файлы и выдает «нет такого файла или каталога» как ошибку.

Вам нужно будет загрузить данные из inputfile.txt самостоятельно и передать их через Process.getOutputStream, а затем прочитать выходные данные из Process.getInputStream и записать их в outputfile.txt.

Кроме того, вы можете запустить cmd.exe и передать всю команду в качестве аргумента - таким образом оболочка выполнит перенаправление за вас, как если бы вы работали из командной строки DOS.

2 голосов
/ 12 января 2011

Угловые скобки являются операторами перенаправления: outputfile.txt заставляет вывод записываться в outputfile.txt вместо экрана. Эта возможность предоставляется оболочкой, однако при вызове вашей программы с исполняющей средой Java оболочка отсутствует. Вызвать через оболочку, как это:

Runtime.getRuntime().exec("cmd /c crf_test.exe model <inputfile.txt> outputfile.txt");

... или перенаправить ввод и вывод с использованием средств, предоставляемых Java; см. например этот вопрос .

1 голос
/ 22 июня 2011

попробуйте это Процесс p = Runtime.getRuntime (). Exec ("crf_test.exe", "/ c", "model outputfile.txt");

0 голосов
/ 12 января 2011

Если я правильно понял проблему, вы хотите вызвать

модель crf_test.exe

с вводом из файла inputfile.txt и выводом на outputfile.txt

Вы должны перенаправлять входящие и исходящие вызовы и звонить только crf_test.exe model.Как перенаправить вход и выход описано в как перенаправить стандартный ввод в java Runtime.exec?

0 голосов
/ 12 января 2011

Проблема в том, что crf_test.ext отсутствует в вашей текущей папке выполнения.Вам нужно либо скопировать исполняемый файл, либо использовать абсолютный путь, либо установить переменную PATH, чтобы включить необходимый путь.

...