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

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

这是打印“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();

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

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

于 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 回答