1

Javaコードからコマンドラインを実行しようとしました。

public void executeVcluto() throws IOException, InterruptedException {
    String command = "cmd /c C:\\Users\\User\\Downloads\\program.exe C:\\Users\\User\\Downloads\\file.txt 5 >> C:\\Users\\User\\Downloads\\result.txt";
    Process process = Runtime.getRuntime().exec(command);
    process.waitFor();
    if (process.exitValue() == 0) {
        System.out.println("Command exit successfully");
    } else {
        System.out.println("Command failed");
    }

}

ただし、出力結果を書き込むべきファイルresult.txtは作成されません。Windowsでcmdからこのコマンドを実行すると、ファイルが作成され、結果が書き込まれます。Command exit successfully というメッセージが表示されます。誰かが私を助けることができますか?

4

2 に答える 2

3

出力リダイレクトはシェルの機能ですが、Java プロセスはそれを理解していません。

1. 上記の行で単一のバッチ ファイルを作成し、ProcessBuilder/Runtime を使用してそれを呼び出します。 2. ProcessBuilder を使用し、出力ストリームを使用して出力をリダイレクトします。例(シェル用です。バッチファイルでも機能します)はこちら

ProcessBuilder builder = new     ProcessBuilder("cmd", "/c", "C:\\Users\\User\\Downloads\\program.exe", "C:\\Users\\User\\Downloads\\file.txt" , "5");
builder.redirectOutput(new File("C:\\Users\\User\\Downloads\\result.txt"));
builder.redirectError(new File("C:\\Users\\User\\Downloads\\resulterr.txt"));

Process p = builder.start(); // throws IOException

(上記は、ランタイムの exec() メソッドが出力をリダイレクトしていないことから微調整されています)

于 2013-07-07T01:42:14.220 に答える
0

cmd.exe必要に応じて、パスを含めて試してください。

シェルにコマンドを与えるのとは異なる、まったく新しいプロセスを作成しています。

于 2013-07-07T01:16:49.540 に答える