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 }

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

25 Java学习之标准I/O流重定向的相关文章

java学习之路--I/O流

java基础学习总结--流 一.JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文件里面存放着各种各样的数据,我们想读文件里面的数据怎么办呢?是通过一个流的方式来读,咱们要想从程序读数据,对于计算机来说,无论读什么类型的数据都是以010101101010这样的形式读取的.怎么把文件里面的数据读出来呢?你可以把文件想象成一个小桶,文件就是一个桶,文件里面的数据就相当于是这个桶里面的水,

Java学习笔记之I/O流(读取压缩文件以及压缩文件)

1.读取压缩文件:ZipInputStream 借助ZipFile类的getInputStream方法得到压缩文件的指定项的内容,然后传递给InputStreamReader类的构造方法,返回给BufferedReader类实例化,从而使得指定项的内容输出到内存中. 2.压缩文件:ZipOutputStream 2.1 注意,zipOut.putNextEntry(entry);// 此方法会清空zip文件原来存在的内容,然后写入文件,并将流定位到条目数据的开始处,直到关闭ZipOutputSt

Java学习笔记38(字符流)

字符输出流:Writer类:使用时候需要它的子类 局限性:只能写文本文件,无法写其他文件 方法: package demo; import java.io.FileWriter; import java.io.IOException; public class WriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d:\\java.txt&q

Java学习笔记42(序列化流)

对象中的数据,以流的形式,写入到文件中保存 过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到文件中,实现序列化 在文件中,以流的形式,将对象读取出来, 读取对象,对象的反序列化 ObjectInputStream将文件对象读取出来,实现反序列化 示例: 简单写一个类: package demo; import java.io.Serializable; public class Person implements Serializable { private Str

Java学习笔记43(打印流、IO流工具类简单介绍)

打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(OutputStream) PringWriter:构造方法:接收File类型,接收字符串文件名,接收字节输出流(OutputStream),接收字符输出流(Writer) 为其他流添加功能,可以方便地打印各种数据值,不同的是:它永远不会抛出IO异常 方法: package demo; import java

JAVA学习笔记(三十四)- 字节打印流 PrintStream

PrintStream字节打印流 import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.Reader; /* * Pri

java学习笔记16--I/O流和文件

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对

想要成为JAVA高手的25个学习目标

本文将告诉你学习Java需要达到的25个目标,希望能够对你的学习及找工作有所帮助.对比一下自己,你已经掌握了这25条中的多少条了呢? 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该了解UML,尤其是 class,object,interaction以及statediagrams. 2.你需要学习Java语言的基础知识以及它的核心类库 (collections,serialization,streams,networking,?multit

java学习之IO字符流

1 package com.io; 2 3 import java.io.*; 4 /** 5 * 文件字符流的读取 6 * @author ganhang 7 * 8 */ 9 public class FileReaderDemo { 10 public static void read(){ 11 File file =new File("1.txt"); 12 try { 13 FileReader fr=new FileReader(file); 14 StringBuffe