2012-09-17 87 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

相關問題