欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java重定向标准输入/输出

程序员文章站 2024-02-03 17:05:58
...

重定向IO

Java标准输入是 System.in, 代表键盘
标准输出是 System.out, 代表显示器。
System类提供下面重定向标准IO。

  • setErr(PrintStream err): 重定向标准错误
  • setIn(InputStream in): 重定向标准输入
  • setOut(PrintStream out): 重定向标准输出

下面将标准输出重定向到文件

        try(
                PrintStream printStream = new PrintStream(new FileOutputStream("abc.txt"))
                ){
            System.setOut(printStream);
            System.out.println("test 字符串");
            System.out.println(new FileTest());
        }
        catch (IOException e){
            e.printStackTrace();
        }

下面重定向标准输入到文件,而不是键盘

        try (
                FileInputStream fis = new FileInputStream("abc.txt");
                ){
            System.setIn(fis);
            Scanner scanner = new Scanner(System.in);
            scanner.useDelimiter("\n");
            while (scanner.hasNext()){
                System.out.println(scanner.next());
            }

        }
        catch (IOException e){
            
        }

读取其他进程的数据

使用 Runtime 对象的 exec()方法可以运行平台上的其他程序。
该方法产生一个Process对象,Process对象代表由java程序启动的子进程。
Process类提供下面三个方法:

  • getErrorStream(): 子进程错误流
  • getInputStream(): 子进程输入流
  • getOutputStream(): 子进程输出流

下面例子启动 javac 程序:输出错误流

        Process process = Runtime.getRuntime().exec("javac");
        try (
                BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()))
                ){
            String buff = null;
            while ((buff = br.readLine()) != null){
                System.out.println(buff);
            }
        }
        catch (IOException e){

        }

读取输入流

        Process process = Runtime.getRuntime().exec("ls -l");
        try (
                BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))
                ){

            String buff = null;
            while ((buff = br.readLine()) != null){
                System.out.println(buff);
            }
        }