日期:2014-05-20  浏览次数:20973 次

System.setOut(ps)重定义了输出流后,如何重定向控制台输出?
System.setOut(ps)重定义了输出流后,如何重定向控制台输出?

System.setOut(ps)这一设置的作用域是在哪到哪?

用完后,如何设置回标准输出?

import   java.io.*;

public   class   TestSetout   {
      public   static   void   main(String   args[])   {
              System.out.println( "ok ");     //这一句可以打印到控制台
              print();
              System.out.println( "ok ");     //以下5句就不知道哪去了.也没有打印到文件.
              System.out.println( "ok ");
              System.out.println( "ok ");
              System.out.println( "ok ");
              System.out.println( "ok ");
      }
      static   void   print(){
FileOutputStream   out   =   null;
try{
out   =   new   FileOutputStream( "c:/java/kk.txt ");
}catch(FileNotFoundException   e)   {

}
PrintStream   ps   =   new   PrintStream(out);
System.setOut(ps);
System.out.println( "lasjflsdjflsdjfisjdfjsdfjsdoifj ");
System.out.println( "lasjflsdjflsdjfisjdfjsdfjsdoifj ");
System.out.println( "lasjflsdjflsdjfisjdfjsdfjsdoifj ");
System.out.println( "lasjflsdjflsdjfisjdfjsdfjsdoifj ");

try{
        ps.close();
        out.close();
}catch(IOException   e){ }
}
}

------解决方案--------------------
我个人觉得回答你这个问题要是自己想还是要花一点点时间的

看过源码之后发现
可以用
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
重新定位到标准输出流

setOut实际上执行了
public static void setOut(PrintStream out) {
checkIO();
setOut0(out);
}
而setOut0(out)是本地方法
我猜想他的功能之一就是System.out = 上面的out

ps:记得以后多放一点分,这样回答的人就多了:)