我能够打开一些程序,它可以从 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/