你需要执行以下操作:
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));System.setOut(out);第二句话是关键。它将假定的“最终”
System.out属性的值更改为提供的
PrintStream值。
可以使用类似的方法(
setIn和
setErr)来更改标准输入和错误流。
java.lang.System有关详细信息,请参考
javadocs。
上面的一个更通用的版本是这样的:
PrintStream out = new PrintStream( new FileOutputStream("output.txt", append), autoFlush);System.setOut(out);如果
append为is
true,则流将追加到现有文件,而不是将其截断。如果
autoflush为
is true,则每当写入字节数组,
println调用其中一种方法或写入a时,将刷新输出缓冲区
n。
我想补充一下,通常最好使用Log4j,Logback或标准Java java.util.logging子系统之类的日志记录子系统。它们通过运行时配置文件提供细粒度的日志记录控制,支持滚动日志文件,系统日志的提要,等等。
或者,如果你不是“记录”,请考虑以下事项:
- 对于典型的Shell,你可以将标准输出(或标准错误)重定向到命令行上的文件。例如
$ java MyApp > output.txt
有关更多信息,请参考Shell教程或手册。
- 你可以更改应用程序以使用out作为方法参数或通过单例或依赖项注入传递的流,而不是写入
System.out
。
更改
System.out可能会导致JVM中其他未预期到的代码令人讨厌。(设计正确的Java库将避免依赖
System.out和
System.err,但是你可能很不幸。)



