zoukankan      html  css  js  c++  java
  • 25 Java学习之标准I/O流重定向

    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 }
    View Code
    1 I
    2 love
    3 china
    4 I
    5 love
    6 my
    7 family
    View Code

    说明:将文件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 }
    View Code

    执行结果:

    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 }
    View Code

    总结:标准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>>

  • 相关阅读:
    委托、Lamda表达式
    springcloud-feign的hystrix支持
    springcloud-断路器hystrix
    Java原子性、可见性、内存模型
    volatile特性
    synchronized实现可见性
    Js四则运算精度问题处理
    docker 简单安装java web项目
    elasticsearch 分布式集群搭建
    logstash-input-jdbc同时同步多个表
  • 原文地址:https://www.cnblogs.com/Hermioner/p/9783406.html
Copyright © 2011-2022 走看看