使用Runtime.exec创建文件?

Joh*_*995 3 java linux shell terminal

我在Java中使用Runtime.exec时遇到了麻烦,似乎有些命令可以正常工作而其他命令却没有.例如,如果我跑

echo some data > data.txt
Run Code Online (Sandbox Code Playgroud)

在我的终端它工作正常,但是如果我尝试使用Java来执行此操作它不起作用.

Runtime mRuntime = Runtime.getRuntime();
Process mProcess = mRuntime.exec("echo some data > data.txt");
mProcess.waitFor();
Run Code Online (Sandbox Code Playgroud)

这有什么理由吗?

wkl*_*wkl 8

echo在某种意义上它不是一个真正的命令,它有一个你可以运行的二进制文件.它是shell的内置功能.

您可以尝试cmd.exe在Windows或shLinux/Mac/Unix中运行shell ,然后传递命令以字符串形式运行..就像使用'bash'一样,您可以这样做:

编辑,因为重定向使用有点不同 Runtime

做正确的重定向,你应该使用形式exec,需要一个String[].

这是一个使用重定向的快速示例.

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

但是如果你只想创建一个文件,你可以使用Java自己的API而不是使用来创建文件Runtime.