Ответ 1
Process
OuputStream
(наша точка зрения) - это STDIN с точки зрения процесса
OutputStream stdin = process.getOutputStream(); // write to this
Так что у вас должно быть правильно.
Мой драйвер (примените свои собственные лучшие практики с помощью операторов try-with-resources)
public class ProcessWriter {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder("java", "Test");
builder.directory(new File("C:\\Users\\sotirios.delimanolis\\Downloads"));
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));
writer.write("Sup buddy");
writer.flush();
writer.close();
Scanner scanner = new Scanner(stdout);
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
}
Мое приложение
public class Test {
public static void main(String[] args) throws Exception {
Scanner console = new Scanner(System.in);
System.out.println("heello World");
while(console.hasNextLine()) {
System.out.println(console.nextLine());
}
}
}
Запуск драйвера печатает
heello World
Sup buddy
По какой-то причине мне нужен close()
. Один flush()
не сделает этого.
Изменить Это также работает, если вместо close()
вы предоставите \n
.
Так и с
writer.write("Sup buddy");
writer.write("\n");
writer.write("this is more\n");
writer.flush();
водитель печатает
heello World
Sup buddy
this is more