eclispe控制台输出太多前面的被掩盖,设置输出定向到一个文件,但是文件有时候内容不全问题解决

本文介绍了当Eclipse控制台输出过多导致前面内容被覆盖时,如何将输出重定向到文件。然而,重定向后可能会遇到文件内容不全的问题。文章深入探讨了Java标准输出的重定向方法,以及为何打印输出后内容可能不完整,主要原因是流的缓存设计。通过理解流的缓存机制,可以找到避免内容丢失的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.对Java标准输出重新定向到一个文件

有时候我们为了调试程序需要输出很多内容到控制台(Console)上,但是有时候前面输出的内容已经看不到(我猜应该是Console有一定的运行内存有关),所有我们就看不到完整的输出信息。这个时候有一个办法就是通过把System.out这个输出流定向到一个文件,在程序中利用System.out...等方法打印的内容就会完全存入这个制定的文件中去,方便记录每一次的输出信息。如何进行重新定向只需在你程序开始的时候加几行代码即可,如下
try {
			PrintStream out = new PrintStream( new BufferedOutputStream(new FileOutputStream("F:\\JavaTestLog\\out.txt")));
			System.setOut(out);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
这个时候你需要手动在F盘下建立对应的路径以及文件,如代码中的路径是 "F:\JavaTestLog\out.txt". 这样就可以方便的记录打印台输出的内容。

2.打印输出内容重新定向之后内容也不全

自己通过代码测试有时候发现上面的方法有时候也不“靠谱”,内容还是不能够打印全。后来发现流也是有缓存的,一般缓存不满不会发送出去,所以即使利用上述代码有时候也不会打印全部内容。为了确保全部打印完整,就需要再你想看这个out.txt文件的信息之前你要 System.out.flush();  这样保证所有打印的内容全部输出到文件中去。或者你也可以每个System.out... 之后都System.out.flush(); 一下。但是这样就失去了流的缓存的意义。但是是用来调试的每次都flush一下也无妨,因为等调试好之后就可以把这些输出语句全部去掉,这样也不会影响整个程序的性能。

3.流的缓存设计的意义

学过微机原理的童鞋都知道,CPU访问每一个部件的时间是不同的,最应该记得的是CPU访问内存和硬盘的速度是不一样的(经常玩游戏的都会知道内存不够往往玩游戏会很卡),因为CPU访问内存速度是微秒级的而CPU访问硬盘是毫秒级,根本不在一个数量级上。所以使用输出流的时候最好不要不每次都flush。一般在程序运行最后flush,或者根据具体需要的时候再flush。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值