如何使用System.setOut()将程序输出重定向至指定磁盘文件?
- 内容介绍
- 相关推荐
本文共计821个文字,预计阅读时间需要4分钟。
不能直接传入FileOutputStream,必须包装成PrintStream;否则会抛出NullPointerException或输出异常(如中文乱码、换行丢失等)。Java的System.out是PrintStream类型,System.setOut只接受该类型实例。
实操建议:
- 用
new PrintStream(new FileOutputStream("output.log"))构造,避免裸露流操作 - 务必在构造时显式指定字符集,例如
new PrintStream(new FileOutputStream("output.log"), true, "UTF-8"),否则默认平台编码可能导致中文写入失败 - 重定向前建议先检查目标目录可写,否则运行时抛
FileNotFoundException - 若需追加写入,用
new FileOutputStream("output.log", true)(第二个参数为true)
重定向后如何恢复原始控制台输出
调用 System.setOut() 前必须保存原始 PrintStream,否则无法还原。JVM 启动后 System.out 默认指向控制台,但该引用不可通过反射或静态变量重新获取。
本文共计821个文字,预计阅读时间需要4分钟。
不能直接传入FileOutputStream,必须包装成PrintStream;否则会抛出NullPointerException或输出异常(如中文乱码、换行丢失等)。Java的System.out是PrintStream类型,System.setOut只接受该类型实例。
实操建议:
- 用
new PrintStream(new FileOutputStream("output.log"))构造,避免裸露流操作 - 务必在构造时显式指定字符集,例如
new PrintStream(new FileOutputStream("output.log"), true, "UTF-8"),否则默认平台编码可能导致中文写入失败 - 重定向前建议先检查目标目录可写,否则运行时抛
FileNotFoundException - 若需追加写入,用
new FileOutputStream("output.log", true)(第二个参数为true)
重定向后如何恢复原始控制台输出
调用 System.setOut() 前必须保存原始 PrintStream,否则无法还原。JVM 启动后 System.out 默认指向控制台,但该引用不可通过反射或静态变量重新获取。

