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();
        }
    }
}


 
原文地址:https://www.cnblogs.com/Theshy/p/7527616.html