在移动到下一个语句之前,如何等待批处理文件处理结束使用Runtime.exec或ProcessBuilder.start执行?

时间:2013-02-21 16:49:41

标签: java runtime.exec processbuilder

我为项目编写了一个小应用程序..它将执行以下任务:

  1. 写入commands.bat文件。这个bat文件有一些源代码服务器命令,需要一段时间才能获得进程。
  2. 使用ProcessBuilder执行commands.bat并使用redirectOutput(文件文件)方法获取outputfile.txt。
  3. 读取outputfile.txt并获取所需的输出。
  4. 当我运行此应用程序时,程序控制从步骤1开始并完全执行。在步骤2中,控件启动驱动批处理文件的进程。现在commands.bat文件需要一些时间才能完成(取决于源代码服务器的响应)。有时候这个批处理需要的时间比合理的时间多一点,控件没有等待并开始执行步骤3,这样我就不会在outfile.txt中获得完整的流。 我也使用过这样的东西:

    • waitfor():即使这个控件没有等待进程结束(技术上我可能错了)
    • Thread.sleep()方法。这不起作用,因为批处理文件处理所花费的时间不确定。

    请帮忙。

1 个答案:

答案 0 :(得分:0)

这就是我等待批处理文件执行的方式。希望你现在已经解决了这个问题。但是,它可能有助于其他人看这个问题

// Any command you want to run in my case im executing a batch file
String cmd = "load_execute.bat";
//FILE_PATH is the directory where to starting from

        ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmd).redirectErrorStream(true);
        builder.directory(new File(FILE_PATH));
        Process process = builder.start();

        //Redirect stream from cmd stream to local print stream
        BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = input.readLine()) != null) {
            System.out.println(line);
        }
        input.close();
        res = process.waitFor();`