• 12.5 重定向标准输入输出



    Java标准输入输出分别通过System.in和System.out来代表,在默认情况下它们分别代表键盘和显示器,当程序通过System.in来获取输入时,实际上是从键盘获取输入;当程序通过System.out来获取输出时,程序总是输出到屏幕。
    在System类里提供了如下三个重定向标准输入/输出的方法:
    ★static void setErr(PrintStream err):重定向“标准”错误输出流。
    ★static void setIn(InputStream in):重定向"标准"标准输入流。
    ★static void setOut(PrintStream out):重定向"标准"标准输出流。

    一、重定向输出

    下面程序通过重定向标准输出流,将System.out的输出重定向到文件输出,而不是屏幕输出。

    package section5;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    
    public class RedirectOut
    {
        public static void main(String[] args)
        {
        try(
                //一次性创建PrintStream输出流
                var ps=new PrintStream(new FileOutputStream("src/section5/out.txt"))
        )
        {
                //将标准输出重定向到ps输出流
                System.setOut(ps);
                //向标准输出输出一个字符串
                System.out.println("普通字符串");
                //向标准输出输出一个对象
                System.out.println(new RedirectOut());
        }
        catch (IOException ioe)
        {
            ioe.printStackTrace();
        }
        }
    }
    程序运行结束后,将看到一个out.txt文件,里面的内容如下:
    普通字符串
    section5.RedirectOut@5f184fc6
    

    上面程序中 var ps=new PrintStream(new FileOutputStream("src/section5/out.txt")创建了一个PrintSream输出流,并将系统的标准输出重定向到该PrintStream输出流。运行上面的程序将看不到任何输出——这意味着标准输出不再输出到屏幕,而是输出到out.txt文件中,即可看到文件里的内容,正好于程序中一致。

    二、重定向输入

    下面程序重定向标准输入,从而可以将System.in重定向指定文件,而不是键盘输出。

    package section5;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Scanner;
    
    public class RedirectIn
    {
        public static void main(String[] args)
        {
            try(
                    var fis =new FileInputStream("src\section5\RedirectIn.java")
                    )
            {
                //将标准输入重定向到fis输入流
                System.setIn(fis);
                //使用System.in创建Scanner对象,用于获取标准输入
                var sc=new Scanner(System.in);
                //增加一行把回车符作为分隔符
                sc.useDelimiter("
    ");
                //判断是否华友下一个输入项
                while(sc.hasNext())
                {
                    //输出输入项:
                    System.out.println("键盘输出的内容是:"+sc.next());
                }
            }
            catch (IOException ioe)
            {
                ioe.printStackTrace();
            }
        }
    }
    键盘输出的内容是:package section5;
    键盘输出的内容是:
    键盘输出的内容是:import java.io.FileInputStream;
    键盘输出的内容是:import java.io.IOException;
    键盘输出的内容是:import java.util.Scanner;
    键盘输出的内容是:
    键盘输出的内容是:public class RedirectIn
    键盘输出的内容是:{
    键盘输出的内容是:    public static void main(String[] args)
    键盘输出的内容是:    {
    键盘输出的内容是:        try(
    键盘输出的内容是:                var fis =new FileInputStream("src\section5\RedirectIn.java")
    键盘输出的内容是:                )
    键盘输出的内容是:        {
    键盘输出的内容是:            //将标准输入重定向到fis输入流
    键盘输出的内容是:            System.setIn(fis);
    键盘输出的内容是:            //使用System.in创建Scanner对象,用于获取标准输入
    键盘输出的内容是:            var sc=new Scanner(System.in);
    键盘输出的内容是:            //增加一行把回车符作为分隔符
    键盘输出的内容是:            sc.useDelimiter("
    ");
    键盘输出的内容是:            //判断是否华友下一个输入项
    键盘输出的内容是:            while(sc.hasNext())
    键盘输出的内容是:            {
    键盘输出的内容是:                //输出输入项:
    键盘输出的内容是:                System.out.println("键盘输出的内容是:"+sc.next());
    键盘输出的内容是:            }
    键盘输出的内容是:        }
    键盘输出的内容是:        catch (IOException ioe)
    键盘输出的内容是:        {
    键盘输出的内容是:            ioe.printStackTrace();
    键盘输出的内容是:        }
    键盘输出的内容是:    }
    键盘输出的内容是:}
    

    上面程序中创建了一个FileInputStream输入流,并使用System的setIn()方法将系统的标准输入重定向到该文件的输入流。运行上面的程序,程序不会等到用户输入,而是直接输出了RedirectIn.java文件的内容,这表明程序不再使用键盘作为标准输入,而是直接使用RedirectIn.java文件作为标准输入源。

  • 相关阅读:
    [mysql] 5.1和5.5版本区别
    selenium-51job高级搜索
    selenium-xpath选择操作web元素
    selenium-css选择器高级用法
    selenium-51job自动化测试(css选择器选择元素)
    API测试
    接口测试
    selenium-百度新歌榜
    selenium-frame切换
    selenium等待元素出现和代码抛出异常继续执行
  • 原文地址:https://www.cnblogs.com/weststar/p/12782494.html
Copyright © 2020-2023  润新知