如何在Java中从终端应答命令

时间:2018-09-18 14:46:34

标签: java terminal linuxmint

我想从Java执行命令,但是该命令希望我给它提供一个用户名。

像这个例子:

  

$我的命令

     

[命令]用户名:_

那么如何在Java中为命令提供用户名?

当前我的代码是这样的:

    Process p = Runtime.getRuntime().exec(command);
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String s;
    while ((s = br.readLine()) != null){
        System.out.println(s);
    }
    br.close();
    p.waitFor();
    p.destroy();

1 个答案:

答案 0 :(得分:1)

您需要创建另一个线程并通过process#getOutputStream()抽取用户输入。请参见以下示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;

public class ProcessWithInput {

    public static void main(String[] args) throws IOException, InterruptedException {
        Process p = Runtime.getRuntime().exec("cat");
        OutputStream os = p.getOutputStream();
        os.write("Hello World".getBytes());
        os.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String s;
        while ((s = br.readLine()) != null) {
            System.out.println(s);
        }
        br.close();
        p.waitFor();
        p.destroy();
    }
}

当然,您需要进行适当的错误/异常处理等。

其他选项是使用ProcessBuilder,它允许您通过文件提供输入。