"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump"
 --force
 --quick
 --default-character-set=utf8
 --skip-opt
 --create-options
 --add-drop-table
 --host=localhost
 --user=root
 --password=root
 myDataBase
 myTable
 >
 "C:\Tomcat 6.0\webapps\dump\backup\myDataBase_bak.sql"
以上我通过mysqldump.exe这个工具进行备份的语句,在Windows下cmd.exe中执行能备份。
但是,在Java中调用(下边的变量shell表示上边的备份命令)//执行通不过,但如果我把shell命令中的粗体字的改成其他不带空格的目录
//并且,把粗体外边的双引号去掉,就可以执行备份
Runtime.getRuntime().exec("cmd.exe /c " + shell);
现在的问题就是,为了解决路径中的空格问题,所以路径要加双引号,但是同样加了双引号的shell:
......"C:\Tomcat 6.0\webapps\dump\backup\myDataBase_bak.sql"
在Windows控制台可以执行备份,但是,在Java中调用却出现问题。
如果不加粗体部分不加双引号,并且目录没有空格:
......C:\backup\myDataBase_bak.sql
在Java和Windows控制台都能执行通过怎么解决?

解决方案 »

  1.   

    直接这样可以不?Runtime.getRuntime().exec("C:\\Tomcat 6.0\\webapps\\dump\\backup\\myDataBase_bak.sql");
      

  2.   

    直接那样有什么意义呢?现在是String shell = "cmd.exe /c \"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump\" --force --quick --default-character-set=utf8 --skip-opt --create-options --add-drop-table --host=localhost --user=root --password=root myDataBase myTable > \"C:\\Tomcat 6.0\\webapps\\dump\\backup\\myDataBase_bak.sql\"";Runtime.getRuntime().exec(shell);可是就是不起作用,但是假如:
    shell = "cmd.exe /c \"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump\" --force --quick --default-character-set=utf8 --skip-opt --create-options --add-drop-table --host=localhost --user=root --password=root myDataBase myTable > C:\\dump\\backup\\myDataBase_bak.sql";
    就一点问题也没有,可是问题是备份保存的路径有空格,必须用双引号引起来呀?怎么办?
      

  3.   

    有没有懂这方面东西的?帮帮忙!
    另外linux和window调用shell的方式是否一样?
    是不是linux直接Runtime.getRuntime().exec(shell);就行?
    不用像windows那样Runtime.getRuntime().exec("cmd.exe /c" + shell);