Java已将控制台输出导出到文件,如何停止导出恢复控制台打印?
解决方案
核心实现逻辑
- 重定向
System.out前先备份原始的控制台输出流引用,避免重定向后丢失原流访问路径 - 完成文件写入操作后,将
System.out重置为备份的原始流即可恢复控制台打印 - 及时关闭自定义的文件输出流,避免文件资源泄漏
完整代码示例
import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; public class RedirectTest { public static void main(String[] args) { // 备份原始控制台输出流 PrintStream originalOut = System.out; PrintStream myconsole = null; try { myconsole = new PrintStream(new File("C:\\one\\Chase-"+formattedDate+".txt")); // 重定向输出到文件 System.setOut(myconsole); // 写入内容到文件 myconsole.print(sb); } catch (FileNotFoundException fx) { // 异常打印使用原始输出流,避免输出到文件 originalOut.println(fx); } finally { // 恢复输出流为控制台,无论是否发生异常都会执行 System.setOut(originalOut); // 关闭文件输出流释放资源 if (myconsole != null) { myconsole.close(); } } // 此处的打印内容将正常输出到控制台 System.out.println("已恢复控制台输出"); } }
特殊场景处理
如果未提前备份原始输出流,可通过标准输出文件描述符直接恢复控制台输出:
import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.PrintStream; // 直接重置为控制台输出 System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
内容的提问来源于stack exchange,提问作者Mumin
相关产品推荐
相关产品推荐

