小编mis*_*ang的帖子

运行外部"java myprog <input.txt> output.txt"的Java程序

我想编写一个运行外部"java myprog <input.txt> output.txt"命令的Java程序.最终目标是在两个不同的程序上运行此命令,并将它们的输出相似性与各自的输出文件进行比较.

我想我已经阅读了关于使用ProcessBuilder运行外部程序的所有相关文章,以及关于在该外部程序中处理用户输入的一些条目,但我仍然无法使其工作.根据我的阅读,我认为最好的方法是不运行上面的确切命令,而是读取input.txt文件并将其逐字节地提供给Process对象,然后收集输出并将其写入输出.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 …
Run Code Online (Sandbox Code Playgroud)

java user-input external-process processbuilder

5
推荐指数
1
解决办法
1841
查看次数