0

我正在为这样的.dmp文件运行 Oracle 数据库命令:

String impcmd = "imp askul/askul@askdb file=mydumpfile.dmp log=mylogfile.log fromuser=askul touser=askul full=N ignore=Y grants=Y indexes=Y";
Process p = Runtime.getRuntime().exec(impcmd);
p.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = br.readLine();
while(line != null){
System.out.println(line);
line = br.readLine();
}

数据库导入在后台运行良好,但我希望能够在导入继续时看到控制台输出,因为我现在必须猜测它是否完成。我在这里想念什么?

4

2 回答 2

1

您需要在单独的线程中捕获标准输出和标准错误(以防止阻塞)并在获得它时输出它,同时等待进程完成

请注意,您可能需要同时阅读 stdoutstderr。或者您的输出可能会转到配置的日志文件。

有关更多信息和对示例代码的引用,请参阅此答案。另请查看这篇文章,其中讨论了使用时的常见陷阱Runtime.exec()

于 2014-01-29T14:19:34.530 回答
0

I believe you just want to move the call to waitFor.

// p.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = br.readLine();
while(line != null){
  System.out.println(line);
  line = br.readLine();
}
p.waitFor(); // <-- to here.
于 2014-01-29T14:21:00.007 回答