Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写入已打开终端的输入流_Java - Fatal编程技术网

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();
        }

    }
}