2012-09-05 55 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