4

I'm having trouble using Runtime.exec in Java, it seems some commands work while others do not. For example if I run

echo some data > data.txt

In my terminal it works fine, however if I try and use Java to do this it doesn't work.

Runtime mRuntime = Runtime.getRuntime();
Process mProcess = mRuntime.exec("echo some data > data.txt");
mProcess.waitFor();

Is there any reason for this?

1

2 Answers 2

8

echo is not a real command in the sense that it has a binary that you can run. It is a built-in function of shells.

You could try running a shell like cmd.exe in Windows or sh in Linux/Mac/Unix, and then passing the command to run as a string.. Like using 'bash', you can do this:

edit because redirection is a little different using Runtime

To do redirection correctly, you should be using the form of exec that takes a String[].

Here's a quick example that does work with redirection.

public class RunTest {
   public static void main(String[] args) throws Exception {
      String [] commands = { "bash", "-c", "echo hello > hello.txt" };
      Runtime.getRuntime().exec(commands);
   }
}

But if you just wanted to create a file, you could create the file with Java's own API rather than use Runtime.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for your help, but unfortunately that doesn't seem to work either. While in the Terminal it works fine, it still fails to do anything when I run it using exec.
@JohnSmith1995 - updated my answer, you have to invoke the command a little differently via Java.
1

That is because echo is a shell internal command not a program that can be executed! Try running instead bash -c "echo some data > data.txt"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.