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


161

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

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

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

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

我们如何通过编程将控制台输出重定向到其他文件?


1)也许您应该使用“变量..”(例如)C:\ test $ {???:??}。txt
cloverink 2011年

2
这是个主意。编写自己的eclipse插件(即cusotm按钮),它将为变量(称为${NAME})分配随机但唯一的值,然后执行与run相同的操作。然后将其$NAME用作输出文件的值。也许?
一二三2015年

Answers:


176

转到运行方式并选择Run Configurations->,Common然后在“标准输入和输出”中也可以选择一个文件。


106
我发现有40个人赞成从问题的第二行中复制粘贴内容,真是太搞笑了。
AnthonyW

13
@AnthonyW我认为这主要是因为人们受到标题问题“我们如何将Eclipse输出重定向到文件”的引导。该答案实际上是标题问题的答案。
Gerome Bochmann

1
如果您找不到使用Eclipse 4.4(Luna)的“运行配置”,则打开我的启动配置(通过在“服务器”选项卡中双击服务器),单击“打开lanuch配置”,然后转到“通用”选项卡。在该对话框的下半部分,有一个称为“标准输入和输出”的部分。在这里,我可以单击“文件”并为其指定文件名。
Guy Schalnat

1
提示:打开一个终端,echo $TTY并指定将其返回为文件的内容。然后,终端将镜像Eclipse控制台中的内容。
Sridhar Sarnobat '16

2
什么?仔细阅读提问者的问题时,此答案不正确。
ComputerScientist

11

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

/tmp/FetchBlock-${current_date}.txt

当前日期:

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

或者,您也可以使用system_property或env_var来指定动态内容(需要将其中之一指定为参数)


8

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

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

编辑:

由于此解决方案基于PrintStream,因此我们可以启用autoFlush,但根据docs

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

因此,如果未写新行,请记住 System.out.flush()手动进行。

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


1
System.out.flush()为了避免可能丢失某些输出,似乎还需要关闭。
罗伯特·图珀洛-施内克

1

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

  1. 将光标移动到文件路径的末尾。 在此处输入图片说明

  2. 单击变量并选择string_prompt 在此处输入图片说明

  3. 选择应用并运行 在此处输入图片说明 在此处输入图片说明


0

我们可以通过以下方式设置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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.