【发布时间】:2013-01-10 15:14:53
【问题描述】:
我正在尝试使用 java 捕获外部程序的输出,但我不能。
我有代码可以显示它,但没有将它放入变量中。
例如,我将使用 sqlplus 来执行我的 oracle 代码“进入 exec.sql” system/orcl@orcl : 用户名/密码/数据库名
public static String test_script () {
String RESULT="";
String fileName = "@src\\exec.sql";
String sqlPath = ".";
String arg1="system/orcl@orcl";
String sqlCmd = "sqlplus";
String arg2 = fileName;
try {
String line;
ProcessBuilder pb = new ProcessBuilder(sqlCmd, arg1, arg2);
Map<String, String> env = pb.environment();
env.put("VAR1", arg1);
env.put("VAR2", arg2);
pb.directory(new File(sqlPath));
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader bri = new BufferedReader
(new InputStreamReader(p.getInputStream()));
while ((line = bri.readLine()) != null) {
RESULT+=line;
}
System.out.println("Done.");
}
catch (Exception err) {
err.printStackTrace();
}
return RESULT;
}
【问题讨论】:
-
你问的不清楚。用
System.out.println(line);可以看到,但是RESULT是空的? -
RESULT一开始是空的,但是在while循环中我做了串联 --> RESULT+=line;
-
好的,但是你能看到印有
System.out.println(line);的行吗?另请注意,由于您已重定向错误流,因此不需要bre- 所有内容都将流式传输到bri。 -
您不应该从外部程序的输出流中读取吗? p.getOutputStream()
-
我纠正了错误