Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

running Echo from Java

Tags:

java

windows

exec

I'm trying out the Runtime.exec() method to run a command line process.

I wrote this sample code, which runs without problems but doesn't produce a file at 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));

The output is

INFO 21-04 20:02:03,024 - Ran command 'echo foo > c:\tmp.txt', got exit code 0, output: foo > c:\tmp.txt

like image 533
ripper234 Avatar asked Dec 09 '22 16:12

ripper234


2 Answers

echo is not a standalone command under Windows, but embedded in cmd.exe.

I believe you need to invoke a command like "cmd.exe /C echo ...".

like image 50
Thorbjørn Ravn Andersen Avatar answered Jan 11 '23 15:01

Thorbjørn Ravn Andersen


The > is intrepreted by the shell, when echo is run in the cmmand line, and it's the shell who create the file.

When you use it from Java, there is no shell, and what the command sees as argument is :

"foo > c:\tmp.txt"

( Which you can confirm, from the execution output )

like image 25
OscarRyz Avatar answered Jan 11 '23 13:01

OscarRyz