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

来源:互联网 发布:房价数据库 编辑:程序博客网 时间:2024/06/06 03:29

说明:这是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:本身文章里边都是截图的,可是没法直接复制进去,悲剧)

0 0
原创粉丝点击