您的位置:首页 > 编程语言 > Java开发

重定向输出流实现程序日志

2014-10-28 17:10 393 查看
说明:这是java经典编程实例300中的第13个实例,主要是为了说明使用setOut()方法来设定新的输出流。因为out成员变量被定义为final类型的,无法直接重新复制,故可以通过setOut()方法来来设置新的输出流。
程序:
package char3;
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class RedirectOutputStream {
       publicstatic void main(String args[] ){
              try{
                     PrintStreamout=System.out;
                     PrintStreamps=new PrintStream("/log.txt");
                     intage=18;
                     System.out.println("年龄变量成功电议,初始值为18");
                     Stringsex="女";
                     System.out.println("性别变量定义成功,初始值为女");
                     Stringinfo="这个"+sex+"孩子,应该有"+age+"岁了";
                     System.out.println("整合两个变量为info字符串变量,其结果是:");
                     System.out.println(out);
                     System.out.println("程序运行完毕,请查看日志文件。");
                                   }
              catch(FileNotFoundExceptione){
                     e.printStackTrace();
              }
       }

}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(这里故意没有使用SetOut())

                    System.out.println("整合两个变量为info字符串变量,其结果是:");
                     System.out.println(out);
                     System.out.println("程序运行完毕,请查看日志文件。");
 
输出结果:
年龄变量成功电议,初始值为18
性别变量定义成功,初始值为女
这个"+sex+"孩子,应该有"+age+"岁了
整合两个变量为info字符串变量,其结果是:
java.io.PrintStream@1db9742
程序运行完毕,请查看日志文件。
 
修改程序:
System.setOut(out);
 
这一次应该准确的复现书本程序了吧?
年龄变量成功电议,初始值为18
性别变量定义成功,初始值为女
这个"+sex+"孩子,应该有"+age+"岁了
整合两个变量为info字符串变量,其结果是:
程序运行完毕,请查看日志文件。                      ????

这是为什么?查找原因中………….
找到了:
         PrintStreamout=System.out;
                     PrintStream ps=new PrintStream("/log.txt");
                     intage=18;
                     System.out.println("年龄变量成功电议,初始值为18");
这里应该:
PrintStreamps=new PrintStream("/log.txt");
System.setOut(ps);
                     intage=18;
把这个鬼鬼祟祟的System.setOut(ps);给丢掉了。
然后就是这个样子了:
程序运行完毕,请查看日志文件。
可是不对啊,那个日志呢?好,看看日志去哪了……
桌面没有…….(开个玩笑)
找log的文件去..........
年龄变量成功电议,初始值为18
性别变量定义成功,初始值为女
整合两个变量为info字符串变量,其结果是:
程序这就运行完毕了,但是要学习点东西啊,好吧,我去查资料去:
setOut()方法---该方用于虫子分配System类的标准输出流。

声明:public static voidsetOut(printStream out)

setErr()方法

该方法重新分配System类的标准错误输出流。

声明:public static void setErr(PrintStream err)

setLn()方法—该发放将重新设置System类的in成员变量,即标准输入流。

声明:public static void setIn(inputStream in)

PrintStream

是一个字节打印流,System.out对应的类型就是PrintStream。

它的构造函数函数可以接收三种数据类型的值。

1,字符串路径。

2,File对象。

3,OutputStream。

 

PrintWriter:

是一个字符打印流。构造函数可以接收四种类型的值。

1,字符串路径。

2,File对象。

对于1,2类型的数据,还可以指定编码表。也就是字符集。

关于InputStream.read()

在从数据流里面读取数据时,经常使用InputStream.read()方法,从流里面每次读取一个字节,效率非常低。最好使用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次读取多个字节。

(ps:本身文章里边都是截图的,可是没法直接复制进去,悲剧)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 开始 编程 实例