• 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();
            }
        }
    }
    
    
    
     
  • 相关阅读:
    Wicket框架使用小结
    【YII是个什么鬼】YII入门——URL Manager配置
    【碎碎念】你要做重要的工作
    【科普】五分钟分清网页钟各种长度单位px、em、rem
    【CSS】最简单的css3实现的水平导航栏的手风琴效果
    PYTHON__关于Socket中的Select使用理解
    PIG__Failed to create DataStorage解决方案
    MYSQL__Mysql免安装版的使用(Windows7)
    PYTHON__生成器和普通函数的区别
    vim status 颜色配置
  • 原文地址:https://www.cnblogs.com/Theshy/p/7527616.html
Copyright © 2020-2023  润新知