2012-09-05 66 views
0

我在從Java調用系統命令時遇到問題。我試過以下內容:從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」從來沒有被創建過任何東西。我檢查了,如果條款是否已經被執行或者不執行,我可以看到該消息

Console.out("N"); 

出現了,所以我不知道爲什麼代碼前面2個行不。

這裏是證據表明,「N」是印: enter image description here

我必須說,這是我第一次使用從Java文件調用系統命令的這個東西,所以這也許可以更比可能是一個新手的錯誤。

我真的很感激,如果有人有這個答案。

在此先感謝。

回答

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(); 

問題可能是「回聲」不是您的系統上的程序。如果你正在運行一個shell,它將會有一些命令,這些命令僅在該shell運行時纔可用。

BTW >>是一個只有shell才能理解的語法。

+0

謝謝Peter的回覆。我也在控制檯中單獨嘗試了這個命令,它確實創建了文件並附加了消息。問題來自我從Java調用它。 不過,我試過你的解決方案,它做我想要的。正如你所說的更快更清潔。非常感謝你! – sojeda

1

也許你的文件沒有被創建,因爲重定向(「>>」)沒有被評估。 嘗試包你的電話是這樣的:

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

無論如何,你爲什麼不使用像一個FileWritter?

+0

感謝您的回覆Doug。我不知道FileWriter的存在嘿嘿。 無論如何,我認爲這也是一個錯誤的命令。我也試過你的解決方案,它也不會創建log.txt文件。 謝謝! – sojeda