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。