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

gdou007 2007-08-23 10:06:39
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){ }
}
}
...全文
1982 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
staticabc 2012-03-15
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 zdjray 的回复:]

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

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

setOut实际上执行了
public static void setOut(PrintStream ……
[/Quote]
thank you~
w304341736 2011-12-04
  • 打赏
  • 举报
回复
哈哈,终于解决我的问题了
jingying838 2011-10-24
  • 打赏
  • 举报
回复
一、
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();
}
}
}
zdjray 2007-08-23
  • 打赏
  • 举报
回复
恩,这个方法其实大家一开始就可以想到
我也想到过
不过我只是想告诉你更为通用的方法:)
gdou007 2007-08-23
  • 打赏
  • 举报
回复
PS:本人不是吝啬,只是刚在CSDN注册,才十几分.哈哈!
gdou007 2007-08-23
  • 打赏
  • 举报
回复
我找到更好的办法了,不过还是谢谢你!

在System.setOut(ps)之前,先记下目前的标准输出到哪里.
PrintStream old = System.out;
这样如果想再设置回来就简单了:System.setOut(old);
zdjray 2007-08-23
  • 打赏
  • 举报
回复 1
我个人觉得回答你这个问题要是自己想还是要花一点点时间的

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

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

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

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧