У меня есть код, который запускает java-процесс (т.е.: выполнение скомпилированного java-кода) через
ProcessBuilder builder = new ProcessBuilder("java", "Sample", "arg1", "arg2");
builder.redirectErrorStream(true);
Process process = builder.start();
Благодаря этому я могу в основном обрабатывать выходные данные и ошибки
OutputStream stdin = process.getOutputStream(); // <- Eh?
InputStream stdout = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
// reader.readLine() blah blah
Теперь, как я могу отправить ввод в stdin
? То есть, если код, выполняемый процессом, имеет строку, ожидающую ввода, как в:
Scanner scan = new Scanner(System.in);
String val = scan.nextLine();
System.out.println(val);
Я пробовал это:
writer.write("I'm from the stdin!.");
writer.flush();
Хотя ничего не произошло. Консоль все еще ждала ввода.
Любые мысли?
РЕДАКТИРОВАТЬ: Ответ был дан, как принято ниже. Я редактирую, чтобы показать неисправный код (который я не смог включить в btw. Lol).
Перед частью writer.write()
у меня был
String line;
line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}