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

404*_*und 38 java terminal command launch

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

目前我拥有的是:

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

我尝试在"开始"之后添加下一个命令,我尝试运行另一个包含我的命令的rt.exec,但我找不到让它工作的方法.

如果重要,我正在尝试运行类似于此的命令:

java -flag -flag -cp terminal-based-program.jar
Run Code Online (Sandbox Code Playgroud)

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

rt.exec("cmd.exe /c start command");
Run Code Online (Sandbox Code Playgroud)

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

404*_*und 24

我知道人们建议远离rt.exec(String),但是这样可行,我不知道如何将其更改为数组版本.

rt.exec("cmd.exe /c cd \""+new_dir+"\" & start cmd.exe /k \"java -flag -flag -cp terminal-based-program.jar\"");
Run Code Online (Sandbox Code Playgroud)

  • `cmd /?``/ C执行string指定的命令然后终止/ K执行string指定的命令但仍然是` (2认同)

Zac*_*h L 8

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

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

这将在newDir的目录中打开命令提示符.我认为您的解决方案也可以正常工作,但这会使您的命令字符串或数组更加清晰.

将命令作为字符串并将命令作为String数组有一个重载.

但是,您可能会发现使用ProcessBuilder更加容易,因为ProcessBuilder有一个directory方法来设置当前的工作目录.

希望这可以帮助.


小智 8

public static void main(String[] args) {
    try {
        String ss = 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());
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 您可以从代码中删除不相关的注释并添加一些相关的注释. (8认同)