java 输出流重定向_java io流重定向标准输入和输出 | 人生设计师

99ccf7c2d98b9beaf4d25936c1f5014b.png

一. 点睛

我们知道,java默认的标准输入设备是键盘,默认的标准输出设备是显示器,也就是说我们使用java进行物理输入输出编程的时候,如果没有特殊的设定,则System.in默认接收的是键盘输入,System.out则默认输出到显示器屏幕。

如果想改变默认的输入和输出设置,则可以利用System类提供的重定向输入输出方法进行修改。System类提供了下面三个标准的输入输出方法:

1. 重定向标准输入流

public static void setIn(InputStream in);

2. 重定向标准输出流

public static void setOut(PrintStream out);

3. 重定向标准错误输出流

public static void setErr(PrintStream err);

二. 示例

1. 重定向标准输入

下面的例子使用System类的setIn(InputStream in)方法将System.in的输入来源重定向为文件输入,而不再是键盘输入。业务含义是读取文件自身的内容,然后输出到控制台,代码如下所示:

package org.light4j.io.redirect;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Scanner;

/**

* 重定向输入测试类

*

*

* 读取自身文件内容然后输出到控制台

*

*

* @author longjiazuo

*

*/

public class RedirectInput {

public static void main(String[] args) {

// 获取工作目录

String workDir = System.getProperty("user.dir");

// 获取类名

String className = Thread.currentThread().getStackTrace()[1].getClassName();

// 类的路径

String classPath = workDir + "\\src\\main\\java\\" + className;

// 反斜杠替换掉"."

String currentClass = classPath.replace(".", "\\") + ".java";

Scanner sc=null;

try

(

//新建字节输入流,读取文件自身内容

FileInputStream fis = new FileInputStream(currentClass);

)

{

//重定向标准输入流到FileInputStream

System.setIn(fis);

//使用System.in获取标准输入,创建Scanner对象

//下面的代码sc = new Scanner(System.in)不能和上面的代码System.setIn(fis)位置互换

//必须先重定向输入流

sc = new Scanner(System.in);

//使用回车作为分隔符

sc.useDelimiter("\n");

while(sc.hasNextLine()){

//输出内容到标准输出

System.out.println(sc.nextLine());

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

}finally{

if(sc!=null){

sc.close();

}

}

}

}

运行上面程序之后可以看到,程序并不会等待键盘输入,而是直接在控制台输出了本类RedirectInput.java的代码。这说明程序不再使用键盘作为标准的输入,被重定向为使用文件作为输入源读取数据。

2. 重定向标准输出

下面的例子使用System类的setOut(PrintStream out)方法将System.out的输出重定向输出到文件里面,而不是输出到屏幕上,代码如下所示:

package org.light4j.io.redirect;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.PrintStream;

/**

* 重定向输出测试类

*

* @author longjiazuo

*

*/

public class RedirectOutput {

public static void main(String[] args) {

try

(

// 创建字节输出流,指定文件为output.txt

FileOutputStream fos = new FileOutputStream("output.txt");

//使用PrintStream包装结点流

PrintStream ps = new PrintStream(fos);

)

{

//将输出流重定向到PrintStream

System.setOut(ps);

//输出字符

System.out.println("忆高考\r\n");

System.out.println("年年忆今朝,忙忙赶国考;\r\n");

System.out.println("不成真秀才,只图自逍遥。\r\n");

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

}

}

}

运行上面程序之后可以看到在控制台并没有任何的打印信息,这说明原来的标准输出被重定向了,不再是输出到屏幕上;并且可以看到在当前的工作空间下会生成一个新的文件output.txt,里面的内容就是我们上面的输出字符。

三. 源代码示例

github地址:点击查看

码云地址:点击查看

打赏

267af847f04596db1660587767dfe03f.png

微信扫一扫,打赏作者吧~

欢迎关注人生设计师的微信公众账号

公众号ID:longjiazuoA

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值