一. 点睛
我们知道,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;
/**
* 重定向输入测试类
*
* <p>
* 读取自身文件内容然后输出到控制台
* </p>
*
* @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
,里面的内容就是我们上面的输出字符。
三. 源代码示例
打赏

公众号ID:longjiazuoA

未经允许不得转载:人生设计师 » java io流重定向标准输入和输出