从java调用System命令以保存日志文件

时间:2012-09-05 11:38:54

标签: java exception redirect logging console

我在从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");

出现了,所以我不知道为什么前两行代码没有。

以下是印有“N”的证据: enter image description here

我必须说这是我第一次使用这个从java文件中调用系统命令的东西,所以这可能不仅仅是一个新手错误。

如果有人对此有答案,我真的很感激。

提前致谢。

2 个答案:

答案 0 :(得分: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();

问题可能是“echo”不是您系统上的程序。如果您正在运行shell,它将具有仅在该shell运行时才可用的命令。

BTW >>是一种只有shell才能理解的语法。

答案 1 :(得分:1)

也许您的文件未创建,因为未评估重定向(">>")。 尝试像这样打包你的电话:

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

无论如何,为什么不使用像FileWritter这样的东西?