在程序中重定向打印输出的代码:
try
{
System.out.println("Print on console");
// Store console print stream.
PrintStream ps_console = System.out;
File file = new File("C:/Users/John/Desktop/compiletest/output" + trialNum + ".txt");
FileOutputStream fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
System.out.println("Print in the file !!");
// Set console print stream.
//System.setOut(ps_console);
System.out.println("Console again !!");
}
catch(Exception e)
{
System.out.println("Mission failed, we'll get em next time");
}
如果在我想要重定向其输出的程序中实现此方法,则此方法可以正常工作。在我的情况下,我想要一个单独的类,将某个程序的输出重定向到一个txt文件。
如果有更简单的方法来完成这项任务,我非常倾向于听到。
答案 0 :(得分:1)
这似乎是日志框架的完美用法示例。
您可以使用许多其他库。一般情况下,最好为文件使用单独的流 - 如果必须重定向System.out
,在更改原始PrintStream
之前保留原始PrintStream ORIGINAL_SOUT = System.out;
System.setOut(ps);
System.out.println("ABC"); // Uses file
ORIGINAL_SOUT.println("ABC"); // Uses console
会很有用如果您需要,仍然可以写入控制台:
private static final Logger logger = LoggerFactory.getLogger(YourClass.class);
logger.debug("A message at DEBUG level");
logger.info("A message at INFO level");
logger.warn("A message at WARN level");
logger.error("A message at ERROR level");
日志框架的简单用法示例(来自第一个链接库):
{{1}}
答案 1 :(得分:0)
我认为您应该创建临时功能,以暂时保存和存储您的数据,然后根据需要执行您的交易。最后,您可以将数据永久存储在任何位置。这是我所知道的最着名的方法。您应该查看链接以便于理解。
http://www.daveoncsharp.com/2009/09/how-to-use-temporary-files-in-csharp/
答案 2 :(得分:0)
记录软件(如SLF4J,Log4J等)是更好的选择。 它有不同的方法来创建文件,不同的文件格式,滚动的appender(基于日期/序列/大小),基于优先级的日志