2013-02-27 36 views
3

我知道有很多关于从java.But执行进程时解决的问题我无法使用提供的答案解决我的问题。 我想从java应用程序创建postgresql数据库备份。我用下面的代码具有带空格的多个参数的Java ProcessBuilder

 //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:/PostgreSQL 8.2/bin/pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:/backup test/backups/test_27-1-2013_210.backup", "test"}); 
     //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"}); 
     ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","\"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe\"","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","\"D:\\backup test\\backups\\test_27-1-2013_210.backup\"", "test"}); 
     Map<String, String> env = probuilder.environment(); 
     env.put("PGPASSWORD", "mypass"); 

     final Process process = probuilder.start(); 

上面的代码执行我获得以下错误后:当路径备份文件包含空格,否则创建备份 D:\PostgreSQL' is not recognized as an internal or external command, operable program or batch file.

问题只occures。 我试图在文件路径中同时使用斜杠和反斜杠,并且我引用了文件路径,但每次都收到相同的错误。命令可以从命令提示符执行。

我在做什么错。 ProcessBuilder中的空格参数数量是否有限制? 谢谢

回答

5

由于pg_dump.exe是一个exe文件(而不是.bat文件),所以根本不需要cmd,它可能会导致比解决问题更多的问题。请直接拨打exe,并删除文件路径附近的额外引号集:

new String[]{"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i", 
    "-h","localhost","-p","5432","-F","c","-b", 
    "-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"} 
+0

您是男性。这导致了这个问题。非常感谢 – user2115093 2013-02-27 12:36:45

+0

@ user2115093谢谢,欢迎来到Stack Overflow。当你得到一个解决你的问题的答案时,通过点击左边的勾号来接受它是很好的举止。建立一个接受良好答案的记录是鼓励更多人帮助你解决未来问题的方法。 – 2013-02-27 12:44:00

+0

我打算这么做,但是我一开始就找不到需要点击的地方。再次感谢 – user2115093 2013-02-27 12:50:35