【问题标题】:System.out.println without printing to file when using " > filename"System.out.println 使用“> 文件名”时不打印到文件
【发布时间】:2012-01-17 16:57:05
【问题描述】:

我有一个特殊的问题。我有一个使用以下命令运行的 Java 程序:

cat input_file_name | ./script_name > file_output_name

script_name 脚本就是这样做的:java myprogram

我的问题是:如何在控制台中打印出一些内容而不将其“放入 file_output_name 文件”(因为 > file 将所有 System.out.prints 放入该文件中)

我知道这是可能的,因为已经有一些来自我从我的 java 程序中使用的库中的某个类。但是我找不到这些印刷品的确切来源,所以我不知道它是如何编码的。

感谢您的帮助。

【问题讨论】:

    标签: java bash shell command-line redirectstandardoutput


    【解决方案1】:

    请注意,如果 Java 程序写入标准输出,它无法控制将其输出重定向到哪里,这取决于从命令行调用程序的方式。

    清楚之后,您可以将程序的标准输出重定向到控制台,只需从命令中删除> file_output_name 部分。

    或者,您可以使用tee 命令将程序的输出重定向到控制台一个文件,看看这个article,它详细解释了如何做它。

    【讨论】:

      【解决方案2】:

      最简单的方法是使用System.err.println() 而不是System.out

      它将转到不同的“设备”(stderr 而不是 stdout),并且不会被重定向。

      【讨论】:

        【解决方案3】:

        使用您所展示的内容,您只是将标准输出 (stdout) 重定向。您可以在标准错误 (stderr) 中写入一些内容,而不是让它显示在控制台上。在Java中,这可以通过System.err.println(...)和相关方法来完成。

        【讨论】:

          【解决方案4】:

          简单的答案是将这些消息写入System.err 而不是System.out

          这将起作用,因为> 重定向标准输出而不是标准错误。 (您可以重定向标准错误,但 shell 语法不同;例如 foo 2> /tmp/somefile。)

          一个更复杂的替代方法是更改​​您的程序,以便可以使用输出文件的名称作为参数来调用它。然后打开文件,将其包装在PrintWriter 中并写入该流而不是System.out。通过一些重构,您应该能够构建您的程序,以便它可以以任何一种方式使用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-02-20
            • 2015-01-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多