为Java程序提供输入,该程序在ubuntu上使用RunTime.exec()运行

时间:2013-12-16 13:36:23

标签: java linux runtime.exec

我在文件User.java中有一个java片段

public class User{
  public static void main(String d[]){
    try{
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      String name = br.readLine();
      System.out.println("Hello "+name);
    }catch(IOException e){
      e.printStackTrace();
    }
  }
}

接下来,我编写了另一个运行在程序之上的java程序,其主要功能内容如下。

Runtime runtime = Runtime.getRuntime();
Process proc1 = runtime.exec("javac MY_PATH/User.java");
Process proc2 = runtime.exec("java -cp MY_PATH User");

此代码适用于除需要输入之外的所有java代码段。我应该如何为readLine()提供输入;方法

3 个答案:

答案 0 :(得分:0)

使用Process.getOutputStream()并在那里写入输入数据。

OutputStream out = proc2.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write("World");
writer.flush();

答案 1 :(得分:0)

您应该使用Process.getOutputStream()方法。传递给此输出流的任何数据都将传递到User.java main方法读取的标准输入流。

不要忘记为\n写一个br.readLine();字符来检测行尾。

答案 2 :(得分:0)

认为上面的答案是写的,我想为即将到来的用户生成代码:)下面的方法将接受所有输入集(如果我们为其他程序读取多个输入)并将它们写入bufferedWriter。

public static void giveInputToProcess(Process process, String[] inputs) {
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
            process.getOutputStream()));
    for (String input : inputs) {
        try {
            bw.write(input);
            bw.newLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    try {
        bw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}