我们如何将 Java 程序控制台输出重定向到多个文件?

Posted

技术标签:

【中文标题】我们如何将 Java 程序控制台输出重定向到多个文件?【英文标题】:How can we redirect a Java program console output to multiple files? 【发布时间】:2011-08-08 12:21:18 【问题描述】:

我们如何将 Eclipse 控制台输出重定向到文件?我可以:

    Run Configuration->Commons->Select a file. 使用System.setOut(PrintStream)System.setErr(PrintStream)

1) 的问题是我需要将控制台输出记录到不同的文件而不是一个文件。

2) 的问题在于它只存储由System.out.println() 生成的控制台输出或抛出异常的堆栈跟踪。它不捕获其他类型的输出,例如log4j 警告等。

我们如何以编程方式将控制台输出重定向到不同的文件?

【问题讨论】:

1) 也许你应该使用“变量..”(例如)C:\test$???:??.txt 这是一个想法。编写您自己的 Eclipse 插件(即 cusotm 按钮),它会为变量(称为 $NAME)分配一个随机但唯一的值,然后执行与运行相同的操作。然后使用$NAME 作为输出文件的值。也许? 【参考方案1】:

为了解决这个问题,我使用了 $string_prompt 变量。 它在应用程序运行时显示一个输入对话框。我可以在该对话框中手动设置日期/时间。

    将光标移动到文件路径的末尾。

    点击变量并选择string_prompt

    选择应用并运行

【讨论】:

【参考方案2】:

我们可以通过以下方式设置System类的变量来做到这一点

System.setOut(new PrintStream(new FileOutputStream("输出文件的路径")))。此外,您需要关闭或刷新 'out'(System.out.close() 或 System.out.flush()) 变量,以免最终丢失某些输出。

来源:http://xmodulo.com/how-to-save-console-output-to-file-in-eclipse.html

【讨论】:

【参考方案3】:

您可以在输出文件名中使用“变量”,例如:

/tmp/FetchBlock-$current_date.txt

当前日期:

返回格式为 yyyyMMdd_HHmm 的当前系统时间。可选参数可用于提供替代格式。该参数必须是 java.util.SimpleDateFormat 的有效模式。

或者您也可以使用 system_property 或 env_var 来指定一些动态的东西(其中任何一个都需要指定为参数)

【讨论】:

【参考方案4】:

您可以通过以下方式以编程方式设置 System.out 的输出:

System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("/location/to/console.out")), true));

编辑:

由于这个方案是基于PrintStream,我们可以开启autoFlush,但是根据docs:

autoFlush - 一个布尔值;如果为真,输出缓冲区将被刷新 每当写入字节数组时,println 方法之一是 调用,或写入换行符或字节('\n')

所以如果没有写新行,记得手动System.out.flush()

(感谢罗伯特·图珀洛-施内克)

【讨论】:

看来您还需要用System.out.flush() 关闭以避免可能丢失一些输出。【参考方案5】:

去运行并选择Run Configurations -> Common,在标准输入和输出中你也可以选择一个文件。

【讨论】:

我发现有 40 人对问题第二行的复制粘贴投了赞成票,这真是太搞笑了。 @AnthonyW 我认为这主要是因为人们在这里被标题问题引导,即“我们如何将 eclipse 输出重定向到文件”。这个答案其实就是标题问题的答案。 如果找不到“运行配置”,使用 Eclipse 4.4 (Luna),我打开了我的启动配置(通过双击服务器选项卡中的服务器),单击“打开 lanuch 配置",然后转到常用选项卡。在该对话框的下半部分,有一个名为“标准输入和输出”的部分。在这里,我可以点击文件并给它一个文件名。 提示:打开一个终端,echo $TTY 并指定它返回的任何内容作为您的文件。然后终端将镜像 Eclipse 控制台中的内容。 什么?仔细阅读提问者的问题,这个答案是不正确的。

以上是关于我们如何将 Java 程序控制台输出重定向到多个文件?的主要内容,如果未能解决你的问题,请参考以下文章

Pitest:如何将日志输出重定向到文件?

如何将控制台输出重定向到文本文件

如何将标准输出重定向到 Windows 应用程序中的某个可见显示?

如何使用 c && 调用 c++ 函数将应用程序输出重定向到 Qt 中的 textEdit

如何将控制台内容重定向到 Java 中的 textArea?

将命令提示符输出重定向到 Visual Studio 2012 中的输出窗口