Программа на Java, которая запускает внешний файл «java myprog < input.txt > output.txt»

Я хочу написать программу на Java, которая запускает внешнюю команду "java myprog < input.txt > output.txt". Конечная цель состоит в том, чтобы запустить эту команду в двух разных программах и сравнить сходство их выходных данных с соответствующими выходными файлами.

Кажется, я прочитал почти все соответствующие статьи об использовании ProcessBuilder для запуска внешней программы и несколько статей об обработке пользовательского ввода в этой внешней программе,но я все еще не могу заставить вещи работать. Из того, что я прочитал, я думаю, что лучший подход - не запускать точную команду выше, а вместо этого читать файл input.txt и передавать его байт -на -байт в объект Process, затем собирать вывод и напишите это в output.txt... Я на 100% открыт для других вариантов.

Я составил приведенный ниже код на основе своих показаний. Похоже, что входные данные из input.txt правильно передаются в myprog, но когда я пытаюсь распечатать вывод внешней программы на консоль для проверки, программа зависает в точке, где (неожиданно )ожидается ввод пользователя в myprog.

Я получаю те же проблемы со строкой redirectErrorStream (true )и без нее.

Я действительно хочу, чтобы это было на Java, так как я планирую поделиться исходным кодом с людьми, результаты работы которых я буду сравнивать, а они в основном знакомы только с Java.

import java.io.*;
import java.util.*;

public class test7 {

    public static void main(String args[]) {

        try {
            // WANT: "java myprog < input.txt > output.txt"
            String inputFile = "input.txt";
            String outputFile = "output.txt";

            ProcessBuilder pb = new ProcessBuilder("java","myprog");
            pb.redirectErrorStream(true); // merge stdout, stderr of process
            Process p = pb.start();

            // write input to the running program
            OutputStream pos = p.getOutputStream();
            InputStream fis = new FileInputStream(inputFile);
            int read = 0;
            while ( (read = fis.read()) != -1) {
                pos.write(read);
            }
            fis.close();

            // get output of running program
            InputStreamReader isr = new  InputStreamReader(p.getInputStream());
            BufferedReader br = new BufferedReader(isr);

            // HANGS HERE WHEN USER INPUT REQUIRED
            String lineRead;
            while ((lineRead = br.readLine()) != null) {
                System.out.println(lineRead);
            }

        }
        catch (IOException e) {
            e.printStackTrace(); 
        }
    } // end main

}

Вот содержимое myprog.java:

import java.io.*;

public class myprog {

    public static void main(String args[]) throws IOException {

        System.out.println("Hello world!");
        System.out.println("Enter something:");

        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));

        // the readLine() command causes ProcessBuilder to hang
        cin.readLine();
    }   
}

А файл input.txt просто

p

Файл output.txt должен быть

Hello world!
Enter something:
5
задан missthang 18 April 2012 в 16:00
поделиться