如何打开命令提示符并使用Java插入命令?

是否有可能打开命令提示符(我猜其他系统的任何其他terminal),并在新打开的窗口中执行命令?

目前我所拥有的是:

Runtime rt = Runtime.getRuntime(); rt.exec(new String[]{"cmd.exe","/c","start"}); 

我已经试过在“开始”之后添加下一个命令,我试过运行另一个包含我的命令的rt.exec,但是我找不到使其工作的方法。

如果有问题,我试图运行类似这样的命令:

 java -flag -flag -cp terminal-based-program.jar 

编辑不幸的是,我有一些奇怪的发现。 我已经能够成功地启动命令提示符并传递一个命令使用这个:

 rt.exec("cmd.exe /c start command"); 

但是,似乎只有一个命令。 因为如果我尝试像这样使用命令分隔符“cmd.exe / c start command&command2”,则第二个命令通过后台传递(如果我只是使用rt.exec(“command2”);) 。 现在问题在于,我意识到我需要更改运行命令提示符的目录,因为如果我只是使用jar文件的完整path,jar文件会错误地从命令提示符的活动目录中读取数据,而不是包含其资源的jar的目录。

我知道人们build议远离rt.exec(string),但这个工程,我不知道如何将其更改为arrays版本。

 rt.exec("cmd.exe /c cd \""+new_dir+"\" & start cmd.exe /k \"java -flag -flag -cp terminal-based-program.jar\""); 
 public static void main(String[] args) { String[] arg = new String[]{"-u root", "-h localhost"}; try { String ss = null; Runtime obj = null; Process p = Runtime.getRuntime().exec("cmd.exe /c start dir "); BufferedWriter writeer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); writeer.write("dir"); writeer.flush(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); System.out.println("Here is the standard output of the command:\n"); while ((ss = stdInput.readLine()) != null) { System.out.println(ss); } System.out.println("Here is the standard error of the command (if any):\n"); while ((ss = stdError.readLine()) != null) { System.out.println(ss); } } catch (IOException e) { System.out.println("FROM CATCH" + e.toString()); } } 

如果一次运行两个命令只是为了更改运行命令提示符的目录,则Runtime.exec方法有一个重载,该方法允许您指定当前的工作目录。 喜欢,

 Runtime rt = Runtime.getRuntime(); rt.exec("cmd.exe /c start command", null, new File(newDir)); 

这将在newDir目录中打开命令提示符。 我认为你的解决scheme也可以,但是这可以让你的命令string或数组更清洁。

将命令作为string并将命令作为string数组存在重载。

不过,使用ProcessBuilder可以更容易,它使用directory方法来设置当前的工作目录。

希望这可以帮助。

以下为我在雪豹上的作品:

 Runtime rt = Runtime.getRuntime(); String[] testArgs = {"touch", "TEST"}; rt.exec(testArgs); 

事情是,如果你想读取该命令的输出,你需要读取进程的inputstream。 例如,

 Process pr = rt.exec(arguments); BufferedReader r = new BufferedReader(new InputStreamReader(pr.getInputStream())); 

允许您很容易地读取命令的逐行输出。

问题也可能是,MS-DOS不会将您的参数顺序解释为“启动新的命令提示符”。 你的数组可能应该是:

{“开始”,“cmd.exe”,“\ c”}

要在新的命令提示符下打开命令,您必须使用Process参考。 但是我不确定为什么你只要使用exec就可以这样做,就像我之前评论的人一样。

只需在你传递的string中附加你的命令。

String command =“cmd.exe / c start”+“ your command ”;

Process child = Runtime.getRuntime()。exec(command);