0

Javaからシステムコマンドを呼び出すのに問題があります。私は次のことを試しました:

if (!found) {
    dbContents += ";" + getPreviousValue(i, dbContents);

    try {
        String cmd = "echo \"Device " + headers[i] + " no data incoming at " + timeString + "\" >> /home/envir/11/log.txt";
        Runtime.getRuntime().exec(cmd);
        Console.out("N");
    }
    catch(IOException ioe) {
        System.out.println(ioe);
}

重要なのは、ファイル「log.txt」がまったく作成されないということです。if句が実行されたかどうかを確認したところ、メッセージが表示されていることがわかります

Console.out("N");

DOESが表示されるので、前の2行のコードが表示されない理由がわかりません。

「N」が印刷されている証拠は次のとおりです。 ここに画像の説明を入力してください

Javaファイルからシステムコマンドを呼び出すこのようなものを使用するのはこれが初めてであると言わなければならないので、おそらくこれはおそらく初心者のエラーである可能性があります。

誰かがこれに対する答えを持っているなら、私は本当に感謝します。

前もって感謝します。

4

2 に答える 2

2

コマンドが失敗している可能性があります。エラーメッセージは無視しているProcess.getErrorStream()に送信されるため、表示されません。

あなたの場合、ログファイルに追加したいのであれば、これを行う最良の方法はJavaを使用することです。より速く、よりクリーンで、動作する可能性が高くなります。

PrintWriter pw = new PrintWriter(new FileWriter("/home/envir/11/log.txt", true));
pw.println("Device " + headers[i] + " no data incoming at " + timeString);
pw.close();

問題は、「エコー」がシステム上のプログラムではないことである可能性があります。シェルを実行している場合、そのシェルが実行されているときにのみ使用できるコマンドがあります。

ところで>>、シェルだけが理解できる構文です。

于 2012-09-05T11:41:37.537 に答える
1

リダイレクト(> >>")が評価されていないため、ファイルが作成されていない可能性があります。このようにあなたの呼び出しをラップしてみてください:

String cmd = "sh -c \"echo \\\"Device " + headers[i] + " no data incoming at " + timeString + "\\\" >> /home/envir/11/log.txt\"";

とにかく、FileWritterのようなものを使ってみませんか?

于 2012-09-05T11:48:43.063 に答える