如何在使用java提示输入密码时执行cmd行

时间:2012-02-04 19:06:50

标签: java cmd

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语句在其命令行中不接受密码..

4 个答案:

答案 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解决方案,但我的编辑遭到拒绝。