java - 如何在 CMD 中打开程序并使用 Java 与其交互

标签 java cmd process runtime

我能够打开一些程序,它可以从 cmd 获取指令来执行一些操作,例如使用某些参数打开文件,检查它是否准备就绪,等等...

这就是我通过 Java 打开文件的方式。

final String location = "C:\\Program";
final File dir = new File(location);
String cmd = "cmd.exe /c start my-program.exe";         
Process process = Runtime.getRuntime().exec(cmd, null , dir);

我现在如何与它交互,发送“check_status”或“do_some_stuff”等命令并将其输出到 Java。

如果我尝试这个:

String [] cmd = {"cmd.exe /c start my-program.exe", "do_stuff"};
Process process = Runtime.getRuntime().exec(cmd, null , dir);

我收到错误:“无法运行程序“cmd.exe/c start my-program.exe.exe”(在目录“C:\Program”中):CreateProcess error=2,系统找不到指定的文件”

但是当我发送单个字符串作为参数时,它确实找到了文件。

我知道我可以通过这种方式将其输出到 Java:

java.io.InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;

while ((line = br.readLine()) != null) {
System.out.println(line);   
}

编辑:通过使用 getOutputStream 解决。

Writer w = new OutputStreamWriter(process.getOutputStream());
        w.write("custom_command");
        w.close();

最佳答案

我使用standalone.bat文件(类似.exe文件)启动了Wildfly服务器

public static void main(String[] args) throws IOException {
    ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "cd D:\\Users\\turack\\Downloads\\wildfly-16.0.0.Final\\bin\\ && standalone.bat");
    processBuilder.redirectErrorStream(true);
    Process process = processBuilder.start();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line;
    while (true) {
        line = bufferedReader.readLine();
        if (line == null) { break; }
        System.out.println(line);
    }
    bufferedReader.close();
}

关于java - 如何在 CMD 中打开程序并使用 Java 与其交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57695775/

相关文章:

java - 无法通过持久性删除来删除 jpa 子实体

java - 重用 Tomcat Tribes 配置在节点之间发送消息

windows - CasperJS 脚本永远不会退出

java - Android 反序列化 Arraylist 的速度问题

windows - 将文件内容重定向到命令提示符中的变量

windows - 如何在 Batch 中获取电池百分比?

process - 在 Elixir 任务中获取用户输入

eclipse - eclipse (保存工作台状态)

python - 如何使用 Python 构建基于时间戳发生的序列?

java - 如何使用 CAPTURE 绑定(bind)创建 AST?