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){ }
}
}

解决方案 »

  1.   

    我个人觉得回答你这个问题要是自己想还是要花一点点时间的看过源码之后发现
    可以用
    System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
    重新定位到标准输出流setOut实际上执行了
    public static void setOut(PrintStream out) {
    checkIO();
    setOut0(out);
    }
    而setOut0(out)是本地方法
    我猜想他的功能之一就是System.out = 上面的outps:记得以后多放一点分,这样回答的人就多了:)
      

  2.   

    我找到更好的办法了,不过还是谢谢你!在System.setOut(ps)之前,先记下目前的标准输出到哪里.
    PrintStream old = System.out;
    这样如果想再设置回来就简单了:System.setOut(old);
      

  3.   

    PS:本人不是吝啬,只是刚在CSDN注册,才十几分.哈哈!
      

  4.   

    一、
    print(); 
    System.out.println( "ok ");//这一句打印到文件了
    二、
    想要重定向到原来的输出流,要在程序先前保存原输出流
    public class RedirectOutputStream {
    public static void main(String[] args) {
    try{
    PrintStream out=System.out;//保存原输出流
    PrintStream ps=new PrintStream("C:/log.txt");
    System.setOut(ps);//设定新的输出流
    int age=10;
    System.out.println("年龄变量成功定义,初始值为"+age);
    String sex="女";
    System.out.println("性别变量成功定义,初始值为"+sex);
    System.setOut(out);//恢复原有输出流
    System.out.println("程序运行完毕,请查看日志文件");
    }catch (FileNotFoundException e) {
    e.printStackTrace();
    }
    }
    }