无法运行并通过Java为C代码提供输入

时间:2016-10-01 23:12:35

标签: java processbuilder

我想通过Java运行C代码来打印用户输入的整数。我正在使用 ProcessBuilder 类。

Java代码为我通过outputstream输入的每个整数提供相同的输出(stdout:0)。

public class test {
    public static void main(String args[]) throws IOException {
        String line;
        ProcessBuilder builder = new ProcessBuilder("first1.exe");
        Process process = builder.start();
        OutputStream stdin = process.getOutputStream();
        InputStream stdout = process.getInputStream();
        InputStream err=process.getErrorStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
        writer.write(8);
        writer.flush();
        line = reader.readLine();
        System.out.println("Stdout: " + line);
    }
}

我总是得到输出:

stdout:0

first1.exe 的C代码为:

#include <stdio.h>
int main ()
{
    int n;
    scanf("%d",&n);
    printf("%d",n);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

在上面的代码中,当C代码first1.exe执行时,它等待输入。

这里作者只写 8 并且在代码first1.exe要求用户写 8 并按回车时不执行任何操作。

上面的代码不起作用,因为没有给出输入或换行符。 用writer.write(8);替换行writer.write(8+"\n");并在process.waitFor()之前添加writer.write(8+"\n"),它将正常工作。

在替换语句时,代码将stdout:8作为输出。

答案 1 :(得分:0)

使用

process.waitFor();
writer.write(8+"\n");
enter code here