Использование inputStream и OutputStream для чтения и записи данных в процесс - PullRequest
0 голосов
/ 20 мая 2018

В настоящее время я запускаю файл .class как процесс.Файл .class представляет собой простую программу, которая просит пользователя ввести число, принимает ввод и печатает ввод пользователя обратно на экран.До сих пор мне удавалось распечатать инструкцию «Введите число:» из процесса на консоли через InputStream и записать ввод, введенный пользователем через OutputStream.Я не могу напечатать последние утверждения на экране, которые должны быть

"Вы ввели:" + userinput

Мой код:

String command [] = {"java" , "-cp", "C:\\Users\\Mahika\\Documents\\NetBeansProjects\\JavaTest\\compilerTest", "InputInteger"};
ProcessBuilder pb = new ProcessBuilder(command);
Process p = pb.start();
System.out.println("Process started");
BufferedReader br = new BufferedReader (new InputStreamReader(p.getInputStream()));
String output = null;

while((output = br.readLine()) != null){
    System.out.println(output);
    break;
}
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

OutputStream os = p.getOutputStream();
PrintStream ps = new PrintStream(os);
os.write(i);
os.flush();  

Я не знаю, как использовать InputStream снова, чтобы прочитать «Вы ввели:» + userinput.

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Это должно работать:

public static void main(String[] args) throws IOException {
    String command[] = {"java.exe", "-cp", "C:\\Users\\Mahika\\Documents\\NetBeansProjects\\JavaTest\\compilerTest", "InputInteger"};
    ProcessBuilder pb = new ProcessBuilder(command);
    Process p = pb.start();
    System.out.println("Process started");
    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    System.out.println(br.readLine());
    Scanner sc = new Scanner(System.in);
    int i = sc.nextInt();
    PrintStream ps = new PrintStream(p.getOutputStream(), true);
    ps.println(i);
    System.out.println(br.readLine());
}

Просто убедитесь, что приглашение ввода в классе InputInteger завершено символом новой строки (например, созданным println, а не print).

0 голосов
/ 20 мая 2018

Я не совсем уверен, что понимаю вашу проблему, но, насколько я понимаю, вы должны использовать только сканер, чтобы дождаться, пока пользователь наберет свой текст, что-то вроде этого:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int i = sc.nextInt();
    System.out.println("you entered: " + i);
}
...