Java 写入已打开终端的输入流
我无法写入可以通过Java 写入已打开终端的输入流,java,Java,我无法写入可以通过ProcessBuilder打开的命令提示符 我有以下资料: public class Terminal { public static void main(String[] args) { List<String> launch = new ArrayList<String>(); launch.add("cmd"); launch.add("/c"); launch.add(
ProcessBuilder
打开的命令提示符
我有以下资料:
public class Terminal {
public static void main(String[] args) {
List<String> launch = new ArrayList<String>();
launch.add("cmd");
launch.add("/c");
launch.add("start");
launch.add("cmd.exe");
launch.add("/k");
try {
ProcessBuilder builder = new ProcessBuilder(launch);
Process process = builder.start();
OutputStream stdin = process.getOutputStream();
InputStream stdout = process.getInputStream();
BufferedReader r = new BufferedReader(new InputStreamReader(stdout));
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(stdin));
w.write("dir");
w.flush();
w.close();
}
catch (IOException io) {
io.printStackTrace();
}
}
}
让我们看看
cmd/c start cmd/k
的作用:
启动命令提示符,执行以下命令,然后退出cmd/c
使用给定的命令生成一个新进程start
需要一个命令(您没有提供),执行它,然后保持打开状态cmd/k
cmd
实例。第二个实例是使用start
启动的,这会产生一个新进程。您希望“dir”
显示在第二个进程中,而它正在写入第一个进程。不幸的是,第一个在调用start
后立即终止,因为您是用/c
启动它的
尝试将
/c
更改为/k
,然后“dir”
应显示在第一个窗口中。如果唯一的命令是cmd
,则不会打开其他终端。如果我更改为cmd/k start
它会打开,但dir
不会执行。如果我改为start cmd/k
,表示找不到“start”
。如果直接在打开的命令提示符中执行,则后者将起作用。我已经在命令提示符下运行java终端
;我需要它来打开另一个命令提示符进行读/写操作。出现的情况是,当发出“cmd/c”
或“cmd/k”
时,当前命令提示符标题将更改,而不是创建新的命令提示符。只有在调用“start cmd”
字符串时才会出现新的命令。请查看我的编辑;似乎我无法正确访问新的进程流以进行I/O。
public class Terminal {
public static void main(String[] args) {
List<String> launch = new ArrayList<String>();
launch.add("cmd");
launch.add("/k");
launch.add("start");
launch.add("dir");
try {
Process p = new ProcessBuilder(launch).start();
}
catch (IOException io) {
io.printStackTrace();
}
}
}