gpt4 book ai didi

带有 .exe 的 Java 输入/输出流

转载 作者:行者123 更新时间:2023-11-30 05:05:30 25 4
gpt4 key购买 nike

我想做的是,用Java启动一个.exe控制台程序,并使用Java从控制台窗口操作输入和输出流。我知道我可以从应用程序获取输入和输出流,这就是我目前正在做的事情:

    try {
process = Runtime.getRuntime().exec("C:\\Users\\Owner\\Documents\\testApp\\console.exe");
} catch (IOException e1) {
e1.printStackTrace();
return;
}

stdin = process.getOutputStream();
stdout = process.getInputStream();

然后,我可以使用 BufferedReader 来显示 .exe 通常会显示的输出,但是我无法弄清楚如何将输入从 Java 应用程序控制台程序传递到实际的 .exe 输入流。我需要一些关于如何执行此操作的帮助。

编辑:好的,我现在有了这个,它可以同时工作;但是,我似乎无法获得与从 Java 控制台窗口获取的任何输入相关的任何输出。

    new Thread(new Runnable() {
public void run() {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
try {
while ((line = br.readLine()) != null) {
System.out.println("[OUT] " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();

new Thread(new Runnable() {
public void run() {
try {
byte[] buffer = new byte[1024];

int bytesRead;
while ((bytesRead = System.in.read(buffer)) != -1) {
for(int i = 0; i < buffer.length; i++) {
int intValue = new Byte(buffer[i]).intValue();
if (intValue == 0) {
bytesRead = i;
break;
}
}
// for some reason there are 2 extra bytes on the end
stdin.write(buffer, 0, bytesRead-2);
System.out.println("[IN] " + new String(buffer, 0, bytesRead-2) + " [/IN]");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();

最佳答案

您可以创建另一个线程,不断从 Java 控制台读取数据,并将其重新写入进程的标准输入:

new Thread(
new Runnable() {
public void run() {
try {
byte[] buffer = new byte[1024];

int bytesRead;
while ((bytesRead = System.in.read(buffer)) != -1) {
process.getOutputStream().write(buffer, 0, bytesRead);
}
} catch (IOException e) {
// Do something with the error...
}
}
}
).start();

关于带有 .exe 的 Java 输入/输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com