Java的System类提供了一些简单的静态方法调用,以允许我们对标准输入、输出和错误I/O流进行重定向:
- setIn(InputStream)
- setOut(PrintStream)
- setErr(PrintStream)
如果我们突然开始在显示器上创建大量输出,而这些输出滚动得太快以至于无法阅读时,重定向输出就显得极为有用(比如重定向到一个文件中进行输出阅读)
一. 三个静态变量
- System.in (默认从键盘输入)
- System.out(默认输出到显示器)
- System.err
二. 重写向方法
- setIn(InputStream)
- setOut(PrintStream)
- setErr(PrintStream)
System类的out、err 和in成员变量是final类型的,不能直接赋值,要通过应的setters方法来改变流。
三. 举例
1. 重定向输入流
假设test.txt文件中有如下内容:
1 package com.test.a; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.IOException; 7 import java.util.Scanner; 8 9 public class TestSerialversionUID { 10 public static void main(String[] args) throws IOException { 11 try { 12 FileInputStream fis = new FileInputStream(new File("C:\\Users\\hermioner\\Desktop\\test.txt")); 13 //将标准输入重定向为文件的输入。 14 System.setIn(fis); 15 Scanner sc = new Scanner(System.in); 16 //判断输入是否还有下一项,输出System.in中的内容 17 while(sc.hasNext()){ 18 String str = sc.next(); 19 System.out.println(str); 20 } 21 } catch (FileNotFoundException e) { 22 e.printStackTrace(); 23 } 24 } 25 26 27 28 }
1 I 2 love 3 china 4 I 5 love 6 my 7 family
说明:将文件test.txt中得内容作为输入,来代替了键盘输入
2. 重定向输出流
1 package com.test.a; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.PrintStream; 7 8 public class TestSerialversionUID { 9 public static void main(String[] args) throws IOException { 10 try { 11 //1.声明一个输出流PrintStream对象 12 PrintStream ps=new PrintStream(new FileOutputStream("C:\\Users\\hermioner\\Desktop\\test.txt",true)); //追加内容 13 //2.重定向标淮输出流 14 System.setOut(ps); 15 //3.使用PrintStream对象向流中写信息 16 System.out.println("hello"); 17 ps.close(); 18 } catch (FileNotFoundException e) { 19 e.printStackTrace(); 20 } 21 } 22 }
执行结果:
3. 重定向错误流
1 package com.test.a; 2 3 import java.io.FileNotFoundException; 4 import java.io.IOException; 5 import java.io.PrintStream; 6 7 public class TestSerialversionUID { 8 public static void main(String[] args) throws IOException { 9 try { 10 //重定向错误流 11 PrintStream errstream=System.err; 12 PrintStream errprint=new PrintStream("C:\\Users\\hermioner\\Desktop\\test.txt"); 13 System.setErr(errprint);//这里的参数是一个PrintStream 14 String string1="这是重定向错误输出流的内容"; 15 System.err.println(string1); 16 errstream.close(); 17 } catch (FileNotFoundException e) { 18 e.printStackTrace(); 19 } 20 } 21 }
总结:标准I/O这个术语参考得时Unix中“程序所使用得单一信息流”这个概念。按照标准I/O模型,Java提供了System.in、System.out、System.err。其中System.out/err已经事先被包装成了printStream对象, 但System.in却是一个没有被包装过得未经加工得InputStream。这意味着尽管我们可以立即使用System.out/err,但是在读取System.in之前必须对其进行包装。
参考文献:
<<Thinking in Java>>
原文地址:https://www.cnblogs.com/Hermioner/p/9783406.html
时间: 2024-10-18 05:52:59