我正在尝试在MySQL数据库中导入大量 .dmp 文件,因为有超过250个必须导入的文件,我编写了一个应用程序来自动执行250 + DOS命令。代码:
String baseCommand = "cmd /c MySQL -h localhost -u root amateurstable < ";
Process p = Runtime.getRuntime().exec(baseCommand + filePath);
它会执行它应该执行的命令。问题是某些 .dmp 文件大于100MB,但上述代码不会等到命令执行完成。
当它执行大文件的导入命令时,它不会等到导入完成后立即执行下一个命令。这在计算机的响应性方面引起了很多麻烦。
问题是如何让它等到命令执行完成?
答案 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作为包装器更容易。如果你需要杀死一个进程,它可以让生活更轻松。