2

我想使用备份 MySQL 数据库,ProcessBuilder并且该>字符没有按我预期的那样被解释。这是我的代码:

java.util.List<String> cmd = new java.util.ArrayList<>();
cmd.add("mysqldump");
cmd.add("-u");
cmd.add("root");
cmd.add("-p"+password);
cmd.add("DBx");
cmd.add(">");
cmd.add("DBbk.sql");

ProcessBuilder pb = new ProcessBuilder(cmd);
pb.directory(new File("."));
Process p = pb.start();
p.waitFor();

BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while((line = err.readLine()) != null) {
    System.out.println(line);
}

输出是:

警告:在命令行界面上使用密码可能不安全。
mysqldump:找不到表:“>”
4

2 回答 2

7

进程构建器直接执行程序,而不是通过 shell/命令提示符执行它。因此,您不会获得 shell 的任何不错的功能,例如>用于重定向的字符。对不起。

于 2013-10-04T03:17:27.690 回答
1

试一试(仅显示解决方案的重要部分):

new ProcessBuilder("cmd", "/C", "your_command > DBbk.sql").start() 

这样你就明确地调用cmd. 在 Linux 中,您可以调用bash或使用任何 shell。

于 2013-10-04T03:28:53.770 回答