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){ }
}
}
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 = 上面的outps:记得以后多放一点分,这样回答的人就多了:)
PrintStream old = System.out;
这样如果想再设置回来就简单了:System.setOut(old);
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();
}
}
}