java标准i o重定向_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文件中有如下内容:

c45f6a16aee10b037b659d9dc205ee23.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.test.a;2

3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.FileNotFoundException;6 importjava.io.IOException;7 importjava.util.Scanner;8

9 public classTestSerialversionUID {10 public static void main(String[] args) throwsIOException {11 try{12 FileInputStream fis = new FileInputStream(new File("C:\\Users\\hermioner\\Desktop\\test.txt"));13 //将标准输入重定向为文件的输入。

14 System.setIn(fis);15 Scanner sc = newScanner(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

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 I2 love3 china4 I5 love6 my7 family

View Code

说明:将文件test.txt中得内容作为输入,来代替了键盘输入

2. 重定向输出流

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.test.a;2

3 importjava.io.FileNotFoundException;4 importjava.io.FileOutputStream;5 importjava.io.IOException;6 importjava.io.PrintStream;7

8 public classTestSerialversionUID {9 public static void main(String[] args) throwsIOException {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

执行结果:

f6079e0855bdc81584d479d03484cb11.png

3. 重定向错误流

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.test.a;2

3 importjava.io.FileNotFoundException;4 importjava.io.IOException;5 importjava.io.PrintStream;6

7 public classTestSerialversionUID {8 public static void main(String[] args) throwsIOException {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

cc9a4e94dcdcebc0c41a91178eb95b72.png

总结:标准I/O这个术语参考得时Unix中“程序所使用得单一信息流”这个概念。按照标准I/O模型,Java提供了System.in、System.out、System.err。其中System.out/err已经事先被包装成了printStream对象, 但System.in却是一个没有被包装过得未经加工得InputStream。这意味着尽管我们可以立即使用System.out/err,但是在读取System.in之前必须对其进行包装。

参考文献:

<>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值