java输入输出(7)重定向输入输出

  1. java的标准输入输出为键盘和显示器,通过System.in 和System.out实现,可以使用重定向的方式改变程序的输入流和输出流,以下实例为重定向输出到文件和重定向从文件输入,具体的讲解穿插在代码中。
  2. 重定向输出
    //重定向输出到文件,该操作需要可能会发生输入输出异常,故需要在异常处理块中执行
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    
    public class RedirectOut {
        public static void main(String args[]){
            try{
                PrintStream printStream = new PrintStream(new FileOutputStream("out.txt"));
    //            这一句是实例化一个打印流,并且在构造方法中传入了一个文件输出流(这两个类的功能可以在文档中找到)
    //            需要注意的是,如果目标文件不存在,那么程序会创建一个out.txt(在指定的路径中)这里是当前文件夹中
                System.setOut(printStream);
    //            这一句是重定向程序的“标准”输出流
                
                System.out.println("普通字符串");
    //            在这里的时候,因为已经重定向了输出流,所以程序不会再在屏幕上显示“普通字符串”字符串
    //            而是会在out.txt中写入
                System.out.println(new RedirectOut());
    //            这一句和上面的一句道理一样,程序会在文件中写入类名和地址
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    //当程序执行之后,打开out.txt可以看到以下内容
    //        普通字符串
    //        RedirectOut@4554617c
    
  3. 重定向输入

    //重定向从指定文件获取内容(从文件输入),该操作需要可能会发生输入输出异常,故需要在异常处理块中执行
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Scanner;
    
    public class RedirectIn {
        public static void main(String args[]){
            try(
                FileInputStream  fileInputStream = new FileInputStream("src/RedirectIn.java"))
    //                和重定向输出的道理一样,先实例化一个文件按输入流,再在构造方法中传入目标文件
            {
                System.setIn(fileInputStream);
    //            重定向文件"标准"输入流
                Scanner scanner = new Scanner(System.in);
    //            在这里scanner对象会从指定的文件中(也就是这个java文件本身)获取内容,而不会从键盘获得
    
                scanner.useDelimiter("\n");
    //            这一句是设置分隔符为换行
    
                while (scanner.hasNext()){
                    System.out.println("逐行显示"+ scanner.next());
    
    //                持续遍历目标文件,并且逐行输出
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    //输出结果为:
    //逐行显示//重定向从指定文件获取内容(从文件输入),该操作需要可能会发生输入输出异常,故需要在异常处理块中执行
    //        逐行显示
    //    逐行显示import java.io.FileInputStream;
    //        逐行显示import java.io.IOException;
    //        逐行显示import java.util.Scanner;
    //        逐行显示
    //        逐行显示public class RedirectIn {
    //    逐行显示    public static void main(String args[]){
    //        逐行显示        try(
    //                逐行显示            FileInputStream  fileInputStream = new FileInputStream("src/RedirectIn.java"))
    //        逐行显示//                和重定向输出的道理一样,先实例化一个文件按输入流,再在构造方法中传入目标文件
    //        逐行显示        {
    //            逐行显示            System.setIn(fileInputStream);
    //            逐行显示//            重定向文件"标准"输入流
    //            逐行显示            Scanner scanner = new Scanner(System.in);
    //            逐行显示//            在这里scanner对象会从指定的文件中(也就是这个java文件本身)获取内容,而不会从键盘获得
    //                    逐行显示
    //            逐行显示            scanner.useDelimiter("\n");
    //            逐行显示//            这一句是设置分隔符为换行
    //                    逐行显示
    //            逐行显示            while (scanner.hasNext()){
    //                逐行显示                System.out.println("逐行显示"+ scanner.next());
    //                逐行显示
    //                        逐行显示//                持续遍历目标文件,并且逐行输出
    //                逐行显示            }
    //            逐行显示        }catch (IOException e){
    //            逐行显示            e.printStackTrace();
    //            逐行显示        }
    //        逐行显示    }
    //    逐行显示}

猜你喜欢

转载自blog.csdn.net/weixin_39452731/article/details/82413830