package org.sf.exec; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; /** * test.bat 内容为ping.baidu.com * 有输出错误流或者正常流,是不会发生异常的 * */ public class CommandUtil { // 保存进程的输入流信息 private List stdoutList = new ArrayList(); // 保存进程的错误流信息 private List erroroutList = new ArrayList(); public static void main(String[] args) { CommandUtil util = new CommandUtil(); util.executeCommand("E:\\test.bat"); printList(util.getStdoutList()); System.out.println("--------------------"); printList(util.getErroroutList()); } public static void printList(List list){ for (String string : list) { System.out.println(string); } } public void executeCommand(String command) { // 先清空 stdoutList.clear(); erroroutList.clear(); Process p = null; try { p = Runtime.getRuntime().exec(command); // 创建2个线程,分别读取输入流缓冲区和错误流缓冲区 ThreadUtil stdoutUtil = new ThreadUtil(p.getInputStream(), stdoutList); ThreadUtil erroroutUtil = new ThreadUtil(p.getErrorStream(), erroroutList); //启动线程读取缓冲区数据 stdoutUtil.start(); erroroutUtil.start(); p.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } public List getStdoutList() { return stdoutList; } public List getErroroutList() { return erroroutList; } } class ThreadUtil implements Runnable { // 设置读取的字符编码 private String character = "GB2312"; private List list; private InputStream inputStream; public ThreadUtil(InputStream inputStream, List list) { this.inputStream = inputStream; this.list = list; } public void start() { Thread thread = new Thread(this); thread.setDaemon(true);//将其设置为守护线程 thread.start(); } public void run() { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(inputStream, character)); String line = null; while ((line = br.readLine()) != null) { if (line != null) { list.add(line); } } } catch (IOException e) { e.printStackTrace(); } finally { try { //释放资源 inputStream.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } } } }
process java_java进程调用 Process
最新推荐文章于 2023-02-01 10:20:49 发布