如何在路径名中包含空格的java中执行命令

时间:2012-09-17 07:05:47

标签: java mysql netbeans

我想备份数据库。我正在使用mysql数据库和wamp服务器。因为我已经编写了以下代码。

Process runtimeProcess =Runtime.getRuntime().exec("C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump.exe -u root -pkarma dailyreport -r  "+assign+"\\dailyreport.sql");  
int processComplete = runtimeProcess.waitFor();  
if(processComplete == 0)
{  
JOptionPane.showMessageDialog(null, "Backup has been taken successfully", "BackUp", JOptionPane.INFORMATION_MESSAGE);
} 
else 
{  
JOptionPane.showMessageDialog(null, "Could not take backup", "BackUp", JOptionPane.INFORMATION_MESSAGE); 
}

在上面的代码中,String assign表示我想保存数据库备份的路径。但问题是我在运行时将该位置保存为备份。如果我选​​择文件夹名称包含空间的路径,则无法进行备份,因为系统没有获取路径,因为它包含空格。请帮助我如何更改runtime.getruntime.exec()命令。

3 个答案:

答案 0 :(得分:4)

将命令作为String数组

中的单独元素传递
String[] cmds = new String[] {
    "C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump.exe",
    "-u",
    "root",
    "-pkarma",
    "dailyreport",
    "-r",
    assign+"\\dailyreport.sql"};

    Process runtimeProcess = Runtime.getRuntime().exec(cmds);

数组中的每个元素都成为命令的单独参数。

更好的是,使用ProcessBuilder

答案 1 :(得分:1)

用双引号括起路径。这将有助于shell将整个参数视为单个参数,而不是由于空间的存在而将多个参数视为一个参数。

Process runtimeProcess = 
    Runtime.getRuntime().exec("C:\\wamp\\bin\\mysql\\mysql5.5.20\\bin\\mysqldump.exe "
        + "-u root -pkarma dailyreport -r  \"" 
        + assign + "\\dailyreport.sql\" ");  

答案 2 :(得分:1)

尝试将assign字符串放在引号之间:

Process runtimeProcess = Runtime.getRuntime().exec("C:\\wamp\\bin\\mysql"
    + "\\mysql5.5.20\\bin\\mysqldump.exe -u root -pkarma dailyreport "
    + "-r  \""+assign+"\"\\dailyreport.sql");