0

** 直接在终端上运行以下命令可以正常工作

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 程序中执行它?

4

2 回答 2

0

对于我使用的未归档文件

final Runtime r = Runtime.getRuntime();
            final Process p = r.exec("/bin/tar -xvf " + zipFile, null, fileDir);

其中 zipFile - 目标文件名,fileDir - 当前目录路径(需要放置文件的位置)

我还使用了“/bin/tar”,因为直接“tar”在 Runtime.exec 环境中被隐藏了。也尝试使用直接路径(仅用于测试)。

对于日志,只需在末尾添加下一个

        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);
            }
        }
于 2012-12-31T04:45:02.297 回答
0

使用可以更好地处理空格的ProcessBuilder api。输出将在结果文件中。

 new ProcessBuilder( "mysqldump" , "-uabc", "-pabc1234", ... ).start();

'>' 是 Shell 间接 - 如果您的程序是 shell,它可以工作。

new ProcessBuilder( "bash", -"c "mysqldump" , "-uabc", "-pabc1234", ..., "> fileresult"  ).start();
于 2012-12-31T04:42:50.407 回答