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

标签 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 文件调用系统命令的东西,所以也许这可能是一个新手错误。

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

提前致谢。

最佳答案

您的命令可能失败。任何错误消息都会发送到您忽略的 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 才能理解的语法。

关于java - 从java调用系统命令来保存日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12280600/

相关文章:

c# - 如果有一个包罗万象,c# 服务会崩溃吗

java - 在 Matlab 中捕获 Java 异常

java - 控制异常输出格式

linux - 在 linux redhat 中启动时启动 shell 脚本

redirect - 带或不带尾部斜杠的 Nginx 永久重定向

java - 检查数据库并接收android通知

java - 使用聚合操作将对象集合复制到另一个集合而不重复

javascript - 为什么 XMLHttpRequest 不适用于 "www."?

java - AWS : how to fix S3 event replacing space with '+' sign in object key names in json

java - 如何通过JNI分享进度更新?