如果我在 unix shell 中使用这个命令:
ls -lrt > ttrr
我得到我的输出。
但是当我将该命令放入 java 程序中时它不起作用,它不会给出任何错误,但在程序执行完成后没有创建文件。
这是我的程序:
public class sam
{
public static void main(String args[])
{
try
{
Runtime.getRuntime().exec(" ls -lrt > ttrr");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
最佳答案
在 Unix 中,您需要注意命令行首先由 shell 处理,然后执行结果字符串。在您的情况下,此命令:ls -lrt > ttrr
中有一个必须由 shell 处理的 >
。
当您使用 Runtime.getRuntime().exec(command);
时,command
字符串不会被 shell 处理,而是直接发送到操作系统以供其执行被执行。
如果您希望正确执行您的命令(我说的是 ls -lrt > ttrr
),您必须在同一命令中执行 shell。在 Bash 的情况下,你可以使用这样的东西:
public static void main(String args[]) {
try {
Runtime.getRuntime().exec(new String[] {"bash", "-c", "ls -lrt > ttrr"});
} catch(Exception e) {
e.printStackTrace();
}
}
真正被执行的是一个有两个参数的命令:“bash”(shell 程序),“-c”一个在命令行中执行脚本的 Bash 选项,以及“ls -lrt > ttrr”,它是您要运行的实际“命令”。
关于java - 使用java创建unix文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22498085/