我们如何将 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 程序控制台输出重定向到多个文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将标准输出重定向到 Windows 应用程序中的某个可见显示?
如何使用 c && 调用 c++ 函数将应用程序输出重定向到 Qt 中的 textEdit