2012-09-17 73 views
0

我想取数据库的备份。我正在使用mysql数据库和wamp服务器。为此我写了下面的代码。如何在java中执行带有空格的路径名的命令

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表示我想要保存数据库备份的路径。但问题是,我正在运行的位置保存备份。如果我选​​择的路径文件夹名称包含空间,它不能采取备份,因为系统没有得到的路径,因为它包含space.Please帮我我应该如何改变runtime.getruntime.exec()命令。

回答

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\" "); 
+0

+1速度更快;-) –

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"); 
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

+0

+1,好多了,忘了这:( – Vikdor

+0

@Vikdor哦,我怎么知道那种感觉:P – MadProgrammer

相关问题