等到DOS命令执行完成 - Java

时间:2011-11-17 09:57:27

标签: java mysql import wait dump

我正在尝试在MySQL数据库中导入大量 .dmp 文件,因为有超过250个必须导入的文件,我编写了一个应用程序来自动执行250 + DOS命令。代码:

String baseCommand = "cmd /c MySQL -h localhost -u root amateurstable < ";
Process p = Runtime.getRuntime().exec(baseCommand + filePath);

它会执行它应该执行的命令。问题是某些 .dmp 文件大于100MB,但上述代码不会等到命令执行完成。

当它执行大文件的导入命令时,它不会等到导入完成后立即执行下一个命令。这在计算机的响应性方面引起了很多麻烦。

问题是如何让它等到命令执行完成?

4 个答案:

答案 0 :(得分:5)

Runtime.exec返回一个具有waitFor()方法的Process对象。

  

WAITFOR()              如果需要,导致当前线程等待,直到此Process对象表示的进程终止。

由于您已经拥有该Process对象,因此您可以将调用添加到waitFor()

Process p = Runtime.getRuntime().exec(baseCommand + filePath);
p.waitFor();

答案 1 :(得分:2)

答案 2 :(得分:2)

您可以使用ProcessBuilder

ProcessBuilder pb = new ProcessBuilder(baseCommand + filePath, "");
Process start = pb.start();
start.waitFor();

答案 3 :(得分:0)

你也看过Apache Commons Exec吗?

http://commons.apache.org/exec/tutorial.html

看起来你手头的处理能力很好,但我认为使用Runtime exec作为包装器更容易。如果你需要杀死一个进程,它可以让生活更轻松。