A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余耀明 中级黑马   /  2012-4-23 14:06  /  1602 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在javaAPI时,看到System类中有三字段,分别是in、out,err他们都是由public static final 修饰的,是静态常量,为什么还能重定向的呢?内部实现到底是怎么实现的??这里面有java无关的吗???

1 个回复

倒序浏览
这个比较深了,都是底层的问题。关于重新定向是我们在控制台创建大量输出(如在调试程序时),而这些输出滚动的太快以致无法阅读时,重定向输出就显得很有意义。例如重定向输出到文件,便可以很方便的查阅文件。
下面是一个简单的例子,来自《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!");   
     }   
}   


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马