为了账号安全,请及时绑定邮箱和手机立即绑定

将运行时exec()OutputStream打印到控制台

将运行时exec()OutputStream打印到控制台

一只斗牛犬 2019-11-02 10:33:45
我想获得OutputStream的的Process通过启动exec()到控制台。如何才能做到这一点?这是一些不完整的代码:import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.io.PrintStream;import java.io.Reader;public class RuntimeTests{    public static void main(String[] args)    {        File path = new File("C:\\Dir\\Dir2");        String command = "cmd /c dir";        Reader rdr = null;        PrintStream prtStrm = System.out;        try        {            Runtime terminal = Runtime.getRuntime();            OutputStream rtm = terminal.exec(command, null, path).getOutputStream();            prtStrm = new PrintStream(rtm);            prtStrm.println();        }         catch (IOException e)        {            e.printStackTrace();        }    }}
查看完整描述

4 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

在调用process.waitFor()之后,您需要启动一个新线程来读取终端输出流并将其复制到控制台。


查看完整回答
反对 回复 2019-11-02
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

我最近遇到了这个问题,只想提及自Java 7以来,流程构建器api已得到扩展。现在可以使用以下方法解决此问题:


ProcessBuilder pb = new ProcessBuilder("yourcommand");

pb.redirectOutput(Redirect.INHERIT);

pb.redirectError(Redirect.INHERIT);

Process p = pb.start();


查看完整回答
反对 回复 2019-11-02
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

我遇到了类似的问题,并且正在使用以下代码。


Process p = Runtime.getRuntime().exec(".....");

p.waitFor();


String line;


BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));

while((line = error.readLine()) != null){

    System.out.println(line);

}

error.close();


BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

while((line=input.readLine()) != null){

    System.out.println(line);

}


input.close();


OutputStream outputStream = p.getOutputStream();

PrintStream printStream = new PrintStream(outputStream);

printStream.println();

printStream.flush();

printStream.close();


查看完整回答
反对 回复 2019-11-02
  • 4 回答
  • 0 关注
  • 1288 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信