**直接在终端
上运行时,以下命令可以正常工作mysqldump -uabc -pabc1234 --compact --no-create-info -w \"fieldname != 'A'\" dbname tablename -hhostaddress --result-file=/tmp/myfile.txt
**但是当使用Runtime()方法执行它时,它不会在目标文件中生成输出。
String s="mysqldump -uabc -pabc1234 --compact --no-create-info -w \"fieldname != 'A'\" dbname tablename -hhostaddress --result-file=/tmp/myfile.txt";
Runtime.getRuntime().exec(s);
(**说abc是用户名,abc1234是密码)
如果使用重定向到目标文件(>)而不是--result-file选项,则会出现同样的问题。 我该怎么做才能在java程序中执行它?
答案 0 :(得分:0)
使用ProcessBuilder api更好地处理空格。输出将在结果文件中。
new ProcessBuilder( "mysqldump" , "-uabc", "-pabc1234", ... ).start();
'>'是Shell间接 - 如果你的程序是shell,它就可以工作。
new ProcessBuilder( "bash", -"c "mysqldump" , "-uabc", "-pabc1234", ..., "> fileresult" ).start();
答案 1 :(得分:0)
用于启用我使用过的文件
final Runtime r = Runtime.getRuntime();
final Process p = r.exec("/bin/tar -xvf " + zipFile, null, fileDir);
其中zipFile - 目标文件名, fileDir - 当前dir路径(需要放置文件的地方)
我还使用了“/ bin / tar”,因为在Runtime.exec环境中隐藏了直接的“tar”。尝试使用直接路径(仅用于测试)。
日志只需在最后添加
final int returnCode = p.waitFor();
if (logger.isDebugEnabled()) {
final BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = is.readLine()) != null) {
logger.debug(line);
}
final BufferedReader is2 = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((line = is2.readLine()) != null) {
logger.debug(line);
}
}