Hy,
我尝试从我的java应用程序转储postgresql数据库。
在cmd中它没问题:
pg_dump -U user database>outfile.sql
并且CMD提示输入密码
从我的java:
访问此命令行Runtime.getRuntime().exec("pg_dump -U user database>outfile.sql");
现在它等待密码。
我尝试使用Runtime.getRuntime().exec(String[])...
,但没有尝试。
不知何故,我必须在.exec()
方法中设置参数'password',
pg_dump语句在其命令行中不接受密码..
答案 0 :(得分:1)
错过按“Enter”。 这个修改对我有用:
bw.write("password" + "\n");
答案 1 :(得分:0)
您可以按照this question。
中的说明重定向流程的标准输入基本上,他们使用Process.getInputStream
方法并写入此方法返回的流(例如,使用BufferedWriter)。
您将获得Process
方法返回的必需exec()
对象。
答案 2 :(得分:0)
感谢Max,
我试过这个
Process p = Runtime.getRuntime().exec(cmd);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
bw.write("password");
//bw.eriteLine();
bw.flush();
但仍然没有。我使用InputStreamReader来查看来自cmd执行的错误或消息,而不是。它仍在等待'密码'。
但我有另一个解决方案:
Process p = Runtime.getRuntime().exec("cmd /c start cmd.exe /C\"pg_dump -U user -W db>outfile.sql\"");
所以黑色提示符打开时显示“密码:”。写密码,按回车键即可关闭。
这对我来说已经足够了。
由于
答案 3 :(得分:0)
完整的解决方案:
Process process = Runtime.getRuntime().exec(cmd);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("password\n");
bw.flush();
尝试更新@cortexiphan解决方案,但我的编辑遭到拒绝。