zoukankan      html  css  js  c++  java
  • java核心学习(十六) javaIO框架---Process类的流,读写其他进程

    调用 Runtime.getRuntime.exec("javac") 可以运行javac进程,该方法回返回一个Process实例对象来代表被运行的进程(当前进程的子进程),通过实例的getXxxStream()方法可以获得子进程的IO流,下面看例子

      读取进程输出:

    package IOTest;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class ReadFromProcess {
        public static void main(String[] args) throws IOException
        {
            Process p = Runtime.getRuntime().exec("javac");
            try (
                    BufferedReader bfReader = new BufferedReader(new InputStreamReader(p.getErrorStream(),"GBK"))
                    ){
    
                String line = null;
                while ((line = bfReader.readLine()) != null){
                    System.out.println(line);
                }
            }catch (IOException ex){
                ex.printStackTrace();
            }
    
        }
    }

      

    BufferedReader bfReader = new BufferedReader(new InputStreamReader(p.getErrorStream(),"GBK"),注意这一行,getErrorStream()方法会返回一个
    InputStream的实例,所以可以直接将子进程的错误输出流包装成其他进程的输入流,设置编码字符集为GBK是因为笔者当前操作系统为windows7,win7的cmd
    默认编码为GBK,InputStreamReader所使用的默认字符集为utf-8,调用当前系统的命令产生的输出字符编码与cmd一致,若不指定使用GBK编码,则会产生输出乱码。

    上面程序运行输出如下:

      因为错误使用命令,所以产生了错误输出。


    下面尝试向Process内写入数据
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.util.Scanner;
    
    public class WriteToProcess {
        public static void main(String[] args) throws IOException{
            Process p = Runtime.getRuntime().exec("java ReadStandard");
            try(
    
            PrintStream printStream = new PrintStream(p.getOutputStream(),true,"utf-8");
            ){
            printStream.println("这是什么");
            printStream.println(new WriteToProcess());}
        }
    }
    
    //定义一个可以接受标准输入的类
    class ReadStandard
    {
        public static void main(String[] args){
            
    
            try(
    
                    Scanner scanner = new Scanner(System.in);
                    PrintStream ps = new PrintStream(new FileOutputStream("out.txt"));
                    ){
    
                //只把回车作为分隔符
    
                while (scanner.hasNext()){
                    ps.println("键盘输入的内容是:"+scanner.next());
                    ps.flush();
                }
            }catch (IOException ex){
    
                        ex.printStackTrace();
            }
        }
    }
    
    
    
     
  • 相关阅读:
    Collections类
    delphi Tdxribbon 设置背景和skin 皮肤
    模拟一个带背景的 TPanel
    将控件画成圆角的效果(Delphi)
    Delphi自写组件:可设置颜色的按钮
    delphi StringGrid 表格的复制粘贴
    学习人工智能
    python 环境搭建和Spyder的安装应用
    python 廖雪峰的官方网站
    spyder 安装
  • 原文地址:https://www.cnblogs.com/Theshy/p/7527616.html
Copyright © 2011-2022 走看看