работает эхо с Java - PullRequest
       20

работает эхо с Java

3 голосов
/ 21 апреля 2010

Я пытаюсь запустить метод Runtime.exec () для запуска процесса командной строки.

Я написал этот пример кода, который работает без проблем, но не создает файл в каталоге c: \ tmp.txt.

String cmdLine = "echo foo > c:\\tmp.txt";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(cmdLine);

BufferedReader input = new BufferedReader(
                           new InputStreamReader(pr.getInputStream()));
String line;

StringBuilder output = new StringBuilder();
while ((line = input.readLine()) != null) {
    output.append(line);
}

int exitVal = pr.waitFor();

logger.info(String.format("Ran command '%s', got exit code %d, output:\n%s", cmdLine, exitVal, output));

Выход

ИНФОРМАЦИЯ 21-04 20: 02: 03,024 - команда Ran 'echo foo> c: \ tmp.txt', получил код выхода 0, вывод: foo> c: \ tmp.txt

Ответы [ 3 ]

8 голосов
/ 21 апреля 2010

echo - это не отдельная команда в Windows, но встроенная в cmd.exe.

Я считаю, что вам нужно вызвать команду типа "cmd.exe / C echo ...".

4 голосов
/ 21 апреля 2010

Оболочка > интерпретируется оболочкой, когда echo запускается в строке cmmand, и именно оболочка создает файл.

Когда вы используете его из Java, оболочка отсутствует, и команда видит в качестве аргумента:

"foo > c:\tmp.txt"

(что вы можете подтвердить из результатов выполнения)

1 голос
/ 21 апреля 2010

Вы не можете просто передать "> c: \ tmp.txt" в Runtime.exec как часть командной строки, чтобы произошло перенаправление. Из Javadocs: «Все его стандартные операции io (т.е. stdin, stdout, stderr) будут перенаправлены на родительский процесс через три потока (getOutputStream (), getInputStream (), getErrorStream ()).»

Если вы хотите перенаправить вывод в файл, насколько мне известно, единственный способ сделать это - открыть файл на Java, выполнить getInputStream, а затем прочитать из входного потока процесса и записать в требуемый файл. файл.

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