从Java程序运行命令

时间:2016-07-14 01:49:40

标签: java terminal

此代码应执行命令行,但它仅适用于某些命令。例如,它适用于打开和运行jar文件,但似乎无法执行命令:

echo 'Hello World' > HelloWorld.txt 

应该创建一个名为HelloWorld的txt文件。有人能帮我解决问题吗?

public static void command(String command) {
    try {
        Process p = Runtime.getRuntime().exec(command);
        BufferedReader in = new BufferedReader(
                            new InputStreamReader(p.getInputStream()));
        String line = null;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

问题是您的命令中有>,并且您将字符串输入到exec函数。我不确切地知道为什么exec命令不能执行这样的语句,但是如果你有管道|或重定向>等,当命令作为一个命令给出时它不能处理它字符串输入。您需要做的是将其作为单独的脚本运行,即如下

public static void command(String command) {
    try {
        String[] cmd = {"/bin/sh", "-c" , command };  // you have to input an string array your command will be executed in a new shell.
        Process p = Runtime.getRuntime().exec(cmd);
        BufferedReader in = new BufferedReader(
                            new InputStreamReader(p.getInputStream()));
        String line = null;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

新的shell进程将由/ bin / sh创建,整个命令(包括重定向)在返回之前执行。