如何打开命令提示符并使用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);