0

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

  1. 写入 commands.bat 文件。这个 bat 文件有一些源代码服务器命令,需要一些时间来处理。
  2. 使用 ProcessBuilder 执行 commands.bat 并使用 redirectOutput(File file) 方法获取 outputfile.txt。
  3. 读取 outputfile.txt 并获得所需的输出。

当我运行这个应用程序时,程序控制从第 1 步开始并完全执行。在步骤 2 中,控件启动一个驱动批处理文件的进程。现在 commands.bat 文件需要一些时间才能完成(取决于源代码服务器的响应)。有时这个批处理花费的时间比合理的时间多一点,控件没有等待并开始执行第 3 步,这样我就没有在 outfile.txt 中获得完整的流。我还使用了类似的东西:

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

请帮忙。

4

1 回答 1

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();`
于 2013-04-24T18:37:20.787 回答