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

从java调用系统命令以保存日志文件,java,exception,redirect,logging,console,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"; R

我在从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”的证据:

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

如果有人能回答这个问题,我将不胜感激


提前感谢。

您的命令可能失败了。任何错误消息都会发送到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运行时可用的命令


顺便说一句,
>
是一种只有shell才能理解的语法。

您的命令可能失败了。任何错误消息都会发送到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运行时可用的命令


顺便说一句,
>
是一种只有shell才能理解的语法。

可能您的文件没有创建,因为重定向(“>>”)没有计算。 试着像这样结束您的通话:

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

无论如何,为什么不使用文件写入程序之类的东西呢?

可能是因为没有计算重定向(“>>”),所以没有创建文件。 试着像这样结束您的通话:

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

不管怎样,为什么不使用文件写入器之类的工具呢?

谢谢Peter的回复。我还在控制台中单独尝试了该命令,它确实创建了文件并附加了消息。当我从Java调用它时,问题就出现了。尽管如此,我还是尝试了你的解决方案,它满足了我的要求。就像你说的,更快更干净。非常感谢你!谢谢彼得的回复。我还在控制台中单独尝试了该命令,它确实创建了文件并附加了消息。当我从Java调用它时,问题就出现了。尽管如此,我还是尝试了你的解决方案,它满足了我的要求。就像你说的,更快更干净。非常感谢你!谢谢你的回复,道格。我不知道文件编写器的存在,呵呵。无论如何,我认为这也是一个错误的命令。我也尝试过你的解决方案,但它也不会创建log.txt文件。非常感谢。谢谢你的回复,道格。我不知道文件编写器的存在,呵呵。无论如何,我认为这也是一个错误的命令。我也尝试过你的解决方案,但它也不会创建log.txt文件。非常感谢。