java - 使用 "> filename"时不打印到文件的 System.out.println

标签 java bash shell command-line redirectstandardoutput

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

cat input_file_name | ./script_name > file_output_name

script_name 脚本只是做:java myprogram

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

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

感谢您的帮助。

最佳答案

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

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

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

关于java - 使用 "> filename"时不打印到文件的 System.out.println,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461768/

相关文章:

java - 在自定义适配器notifyDataSetChanged上获取NullPointerException

bash - 如何替换特定行号的换行符?

linux - 测试条件shell脚本

shell - 使用剪切重新排列列

linux - 如何编写全屏 Linux 控制台应用程序/脚本?

java - 类似 Cytoscape 的 java 工具来构建图形

Java volatile 和缓存一致性

java - 在 Spring 应用程序中禁用 JMX

bash - 总是给出密码不够强的消息(否则条件正在运行)

linux - 为什么我的 ffmpeg 进程在没有 subprocess.run 的 stdin 参数的情况下永远等待?