我目前正在使用 Java 编写一个 Windows shell 模拟器。当我使用 Process.getOutputStream() 方法读取和显示程序的输出时,大多数程序似乎都可以正常工作。当我从我的程序运行 MySql 控制台时,这似乎并不适用。MySql 似乎没有打印到默认的系统控制台。
如何连接到 MySql 控制台以显示其输出并允许用户通过我的模拟器提供输入?
我认为有两个问题需要解决。首先是救援输出,您可以使用这篇文章(http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.htm)来了解救援输出。所以我使用命令行通过 switch -e 来拯救 mysql 命令行软件的输出:
try {
FileOutputStream fos = new FileOutputStream("c:/test.txt");
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("mysql.exe -u root -e \"select * from table_name\" database_name");
StreamGobbler errorGobbler = new StreamGobbler(
proc.getErrorStream(), "ERROR");
StreamGobbler outputGobbler = new StreamGobbler( proc.getInputStream(), "OUTPUT", fos);
errorGobbler.start();
outputGobbler.start();
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
fos.flush();
fos.close();
} catch (Throwable t) {
t.printStackTrace();
}