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)
这有什么理由吗?
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.