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:记得以后多放一点分,这样回答的人就多了:)