java可通过system类静态方法重定向标准流:setin()改输入源,setout()/seterr()改输出/错误目标为文件;需提前设置、及时关闭流,并可保存原始流以便恢复。

Java 中可以通过 System 类的静态方法重定向标准输入(System.in)、标准输出(System.out)和标准错误(System.err)流,让程序从文件读取输入或把输出写入文件,而不是控制台。
重定向标准输入(System.in)
使用 System.setIn(InputStream) 将输入源替换为文件、字节数组或其他输入流:
- 常见做法是传入
new FileInputStream("input.txt") - 注意:必须在读取之前调用,且建议在程序开始时设置
- 示例:
System.setIn(new FileInputStream("data.txt"));
后续调用Scanner(System.in)或BufferedReader(new InputStreamReader(System.in))就会从该文件读取
重定向标准输出(System.out)
使用 System.setOut(PrintStream) 把输出目标改为文件或自定义打印流:
- 通常配合
FileOutputStream和PrintStream使用 - 示例:
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);
此后所有System.out.println()都会写入文件 - 记得在结束前调用
out.close(),避免资源泄漏
重定向标准错误(System.err)
方式与 System.out 完全一致,用 System.setErr(PrintStream):
- 适合将异常堆栈或调试信息单独记录到日志文件
- 示例:
System.setErr(new PrintStream("error.log")); - 可与
System.out指向不同文件,便于分离正常输出和错误信息
恢复原始流(可选但推荐)
若需临时重定向后还原,应在重定向前保存原始流引用:
- InputStream originalIn = System.in;
PrintStream originalOut = System.out;
PrintStream originalErr = System.err; - 之后可通过
System.setIn(originalIn)等恢复 - 尤其在单元测试或命令行工具中,避免影响其他模块行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











