黑马程序员技术交流社区

标题: System类中字段疑惑?? [打印本页]

作者: 余耀明    时间: 2012-4-23 14:06
标题: System类中字段疑惑??
在javaAPI时,看到System类中有三字段,分别是in、out,err他们都是由public static final 修饰的,是静态常量,为什么还能重定向的呢?内部实现到底是怎么实现的??这里面有java无关的吗???
作者: 刘永菲    时间: 2012-4-23 14:17
这个比较深了,都是底层的问题。关于重新定向是我们在控制台创建大量输出(如在调试程序时),而这些输出滚动的太快以致无法阅读时,重定向输出就显得很有意义。例如重定向输出到文件,便可以很方便的查阅文件。
下面是一个简单的例子,来自《Think in java》,介绍了一些方法的使用,这里添加了一些代码及简要的注释加以说明。

import java.io.BufferedInputStream;   
import java.io.BufferedOutputStream;   
import java.io.BufferedReader;   
import java.io.FileInputStream;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.io.InputStreamReader;   
import java.io.PrintStream;   
   
   
public class Redirecting {   
   
    public static void main(String[] args) throws IOException {   
        /*
          *输入、输出、错误的重定向,定向到文件
          */   
         PrintStream console = System.out;   
         BufferedInputStream in = new BufferedInputStream(   
                new FileInputStream("E:/worksp/reflect/src/Redirecting.java"));   
            
         PrintStream out = new PrintStream(   
                new BufferedOutputStream(   
                        new FileOutputStream("E:/worksp/reflect/src/test.txt")));   
//       PrintStream out = new PrintStream(   
//               new BufferedOutputStream(   
//                   new FileOutputStream("E:/fuel.txt",true)),true);   
//                   第一个true表示追加,第二个表示缓存自动刷新   
            
         System.setIn(in); //输入定向到文件Redirecting.java   
         System.setOut(out); //输出定向到文件test.txt   
         System.setErr(out); //错误定向到文件test.txt   
            
         BufferedReader br = new BufferedReader(   
                new InputStreamReader(System.in)); //InputStreamReader 字节流转换到字符流类   
         String s;   
        while((s = br.readLine()) != null){   
             System.out.println(s);   
         }   
         out.close(); //必须调用的方法   
         System.setOut(console); //重新定向到控制台   
         System.out.println("console!");   
     }   
}   







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2