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

プロセス ビルダーは、シェル/コマンド プロンプトを介してプログラムを実行するのではなく、プログラムを直接実行しています。>したがって、リダイレクト用の文字のようなシェルの優れた機能は得られません。ごめん。

于 2013-10-04T03:17:27.690 に答える
1

これを試してみてください (ソリューションの大部分を表示するだけです):

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

このようにして、明示的に呼び出していますcmd。Linuxでは、bashまたは使用するシェルを呼び出すことができます。

于 2013-10-04T03:28:53.770 に答える