如何在执行时立即显示存储在.txt文件中的.java文件的编译结果?

如何在执行时立即显示存储在.txt文件中的.java文件的编译结果?,java,file,processbuilder,Java,File,Processbuilder,假设我有一个程序a。在这个程序a中,我编译程序B并将结果存储在文件“Error.txt”中。代码如下: import java.io.IOException; public class CompileFile { public void Compile() throws IOException { ProcessBuilder p = new ProcessBuilder("cmd.exe", "/C", "javac *.java 2> Error.

假设我有一个程序a。在这个程序a中,我编译程序B并将结果存储在文件“Error.txt”中。代码如下:

import java.io.IOException;
public class CompileFile
{   
    public void Compile() throws IOException
    {
        ProcessBuilder p = new ProcessBuilder("cmd.exe", "/C", "javac *.java 2> Error.txt");

        p.start();
    }   
}
现在,我必须在程序A中显示“Error.txt”的内容。我使用的是简单的FileReader+BufferedReader。然而,我没有得到任何输出

Error.txt文件确实包含编译错误/结果,但这是在程序A完成执行后发生的。在执行程序A时,它保持为空。因此,我第一次运行程序A时没有得到任何结果

如何解决这个问题


注意:这是我最后一个问题的后续问题:。如果必须,您可以检查它以供参考。

启动
ProcessBuilder
后,您必须使用
waitFor

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

    ProcessBuilder p = new ProcessBuilder("cmd.exe", "/C", 
            "javac path\\of_your_file\\file.java 2> path\\of_your_file\\Error.txt");
    Process process = p.start();
    process.waitFor();//wait until your process finished 

    Scanner in = new Scanner(Paths.get("path\\of_your_file\\Error.txt"));
    while (in.hasNextLine()) {
        String line = in.nextLine();
        System.out.println(line);
    }
}

注意:类CompileFile不是引用中的程序A。我只是从程序A中创建了一个CompileFile类的对象。谁对这个问题投了赞成票?这将需要一两分钟的时间来弄清楚你是否做了一点研究。您可能希望从
进程
类的javadocs开始。当然,只有当您确实需要先将其写入文件时,才需要这样做。如果没有,您应该直接读取命令的输出并将其写入
System.out
will
“cmd.exe”、“/C”、“javac*.java 2>Error.txt;cat Error.txt”
这是一种有效的方法吗?@patrick hainge否。因为cat命令的输出将进入一个缓冲区,而OP似乎没有对该缓冲区执行任何操作。@AbhikBiswas您可以阅读本教程: