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