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

空白をより適切に処理するProcessBuilderAPIを使用します。出力は結果ファイルになります。

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

'>'はシェル間接参照です-プログラムがシェルの場合に機能します。

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

私が使用したファイルを達成しないために

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

zipFile - ターゲット ファイル名、fileDir - 現在のディレクトリ パス (ファイルを配置する必要がある場所)

また、直接の「tar」は Runtime.exec 環境から隠されているため、「/bin/tar」を使用しました。ダイレクト パスも使用してみてください (テスト用のみ)。

ログの場合は、最後に next を追加するだけです

        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 に答える