向Runtime.getRuntime()添加参数?

时间:2010-08-31 12:22:11

标签: java arguments parameter-passing optional-parameters

void restartWeb() {
        try {
            String[] command = new String[] {"webRestarter.exe" , ">>","webLog.log"};
            Runtime.getRuntime().exec(command);
        } catch (java.io.IOException err) {
        webServer.logError(err.getMessage());
        }
    }

为什么这不起作用?我怎么能解决它,所以它确实像我想要的那样工作?

- 使用参数>> webLog.log

执行webRestarter.exe

所以它会吐出这样的东西:

webRestarter.exe>>webLog.log

4 个答案:

答案 0 :(得分:5)

您无法在exec来电中使用管道。管道是shell的功能,而不是操作系统的功能。所以我们必须调用shell可执行文件并传递命令。试试这个:

String[] command = new String[] {"cmd.exe", "/c", "start webRestarter.exe", ">>","webLog.log"};

答案 1 :(得分:1)

参数直接传递给webRestarter.exe命令。您不能使用参数将标准输出重定向到文件,因为这通常由命令行解释器完成。

但是,exec()方法返回一个Process对象,您可以使用它来检索标准输出并将其写入文件。

来源:

http://download.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exec%28java.lang.String%29

http://download.oracle.com/javase/6/docs/api/java/lang/Process.html

答案 2 :(得分:1)

如果我没弄错的话,管道,重定向等都是shell的功能。在这种情况下,这些只是争论。您可以像处理命令一样使用带有/ c开关的cmd.exe来处理这个问题,我相信它会正确处理这个问题,或者自己处理标准输入/输出(虽然这是出了问题,但我更喜欢像commons-exec)。

答案 3 :(得分:0)

以为我会提到两个可能对使用Processes很方便的东西。

  1. ProcessBuilder 是一个获得过程的好方法(in 打算在1.5+ JRE中运行的代码。

  2. 建议小心 阅读并实施 all 建议什么时候 Runtime.exec()不会。