我想备份数据库。我正在使用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()命令。
答案 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");