`

Java运行命令行并获取返回值

阅读更多

方法一

//Process p = Runtime.getRuntime().exec("ping 127.0.0.1 -t");
  Process p = Runtime.getRuntime().exec("javac");
  InputStream is = p.getInputStream();
  BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  String line;
  while((line = reader.readLine())!= null){
   System.out.println(line);
  }
  p.waitFor();
  is.close();
  reader.close();
  p.destroy();
 }

方法二


package com.cmd;

  import java.lang.*;

  import java.io.*;

  public class Process {

  public static void main(String[] args) {

  java.lang.Process process = null;

  try {

  process = Runtime.getRuntime().exec("net user");

  ByteArrayOutputStream resultOutStream = new ByteArrayOutputStream();

  InputStream errorInStream = new BufferedInputStream(process.getErrorStream());

  InputStream processInStream = new BufferedInputStream(process.getInputStream());

  int num = 0;

  byte[] bs = new byte[1024];

  while((num=errorInStream.read(bs))!=-1){

  resultOutStream.write(bs,0,num);

  }

  while((num=processInStream.read(bs))!=-1){

  resultOutStream.write(bs,0,num);

  }

  String result=new String(resultOutStream.toByteArray());

  System.out.println(result);

  errorInStream.close(); errorInStream=null;

  processInStream.close(); processInStream=null;

  resultOutStream.close(); resultOutStream=null;

  } catch (IOException e) {

  e.printStackTrace();

  }finally{

  if(process!=null) process.destroy();

  process=null;

  }

  }

  }

4. Runtime.exec() 不等同于直接执行command line命令!

啊,我算是在这里吃了苦头了。Runtime.exec()很有局限性,对有些命令不能直接把command line里的内容当作String参数传给exec().

比如重定向等命令。举个例子:

javap -l xxx > output.txt

这时要用到exec的第二种重载,即input 参数为String[]:

Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c","javap -l xxx > output.txt"});

 

 

  1. import java.io.InputStreamReader;  
  2. import java.io.LineNumberReader;  
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6.   
  7. public class test{  
  8. /**  
  9.      * 运行shell脚本  
  10.      * @param shell 需要运行的shell脚本  
  11.      */    
  12.      public static void execShell(String shell){  
  13.     
  14.         try {    
  15.             Runtime rt = Runtime.getRuntime();    
  16.             rt.exec(shell);    
  17.         } catch (Exception e) {    
  18.             e.printStackTrace();    
  19.         }    
  20.      }    
  21. /**  
  22.      * 运行shell  
  23.      *   
  24.      * @param shStr  
  25.      *            需要执行的shell  
  26.      * @return  
  27.      * @throws IOException  
  28.      */    
  29.     public static List runShell(String shStr) throws Exception {    
  30.         List<String> strList = new ArrayList();    
  31.     
  32.         Process process;    
  33.         process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);    
  34.         //process = Runtime.getRuntime().exec(shStr);    
  35.         InputStreamReader ir = new InputStreamReader(process    
  36.                 .getInputStream());    
  37.         LineNumberReader input = new LineNumberReader(ir);    
  38.         String line;    
  39.         process.waitFor();    
  40.         while ((line = input.readLine()) != null){    
  41.             System.out.println(line);  
  42.             strList.add(line);    
  43.         }    
  44.             
  45.         return strList;    
  46.     }  
  47.     public static void main(String []arge)throws Exception {  
  48.           
  49.         test t=new test();  
  50.         t.runShell("/home/ubuntu/soft/tomcat/bin/startup.sh")  
  51.     } 

 

 

String[] cmd = new String[]{"/bin/sh","-c", " ps -ef"};

  Process ps = Runtime.getRuntime().exec(cmd);

  BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
  StringBuffer sb = new StringBuffer();
  String line;
  while ((line = br.readLine()) != null) {
  sb.append(line).append("\n");
  }
  String result = sb.toString();

  System.out.println(result);

分享到:
评论

相关推荐

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-056-Java基本语法-获取当前系统的字符编码.avi 北京动力节点-Java编程零基础教程-057-Java基本语法-数据类型-整型.avi 北京动力节点-Java编程零基础教程-058-Java基本语法-数据...

    bat获取网页信息 命令行下调用curl获取网页信息

    命令行下调用curl获取网页信息,例如在Java servlet中使用response.getWriter().print("success") curl就可以获取到"success",并保存到check.txt中,再从check.txt中读取数据,并做判断

    疯狂JAVA讲义

    1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢? 8 ...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    SSH From Matlab(更新)+ SFTP/SCP:通过安全外壳从 Matlab 会话在远程机器上运行命令。-matlab开发

    如果您需要从您的 Matlab 会话(用于近实时数据传输等)访问远程机器,这组函数允许您以编程方式发送单个命令并以单元格数组的形式获取返回值。 添加了与此库兼容的 SFTP 功能。 改为使用 Matlab 的二进制读取操作...

    java面试题

    请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来. 119 84.12. 请写一个java程序实现线程连接池功能? 122 84.13. 编一段代码,实现在控制台输入一组数字后,排序后在控制台输出; 122 ...

    java动态日志注入工具anylog.zip

     1、使用如下命令,生成一个spi实现工程,并导入eclipse  mvn archetype:generate -DarchetypeGroupId=com.github.jobop -DarchetypeArtifactId=anylogspi-archetype -DarchetypeVersion=1.0.4  2、参照该...

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

    基于javatcpsocket通信的拆包和装包源码-golang:学走

    基于java tcp socket通信的拆包和装包源码 go go study notes ...在程序中直接通过os.Args获取命令行参数 编写测试程序 源码文件以_test结尾:xxx_test.go 测试方法名以Test开头:func TestXXX(t *tes

    新版Android开发教程.rar

    � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...

    易语言程序免安装版下载

    修改应用接口支持库,增强“取快捷方式目标”命令功能,可以获取目标、参数、启始位置、图标、运行方式、快捷键、备注等信息。 9. 修改扩展界面支持库三,解决高级选择夹会导致所在窗口的收不到“首次激活”事件的...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    2.12 执行计划并取得数据行 50 2.13 SQL执行——总览 52 2.14 小结 53 第3章 访问和联结方法 55 3.1 全扫描访问方法 55 3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全扫描与多块读取 60 ...

    C#微软培训资料

    3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量...

    【05-面向对象(下)】

    Lambda表达式需要返回值,而它的代码块中仅有一条省略了return的语句,Lambda表达式会自动返回这条语句的 值。 Lambda表达式与函数式接口 •如果采用匿名内部类语法来创建函数式接口的实例,只要实现一...

    pokemongo-game-master:解码的GAME_MASTER-protobuf文件的集合

    宠物小精灵游戏大师 此存储库是已解码的GAME_MASTER-protobuf文件的集合入门如果您想拥有最新的GAME_MASTER... 在幕后,它将从该存储库中获取数据,并以promise返回值。 const gameMaster = require ( 'pokemongo-game

    Python编程入门经典

    17.4 从C向Python返回值 325 17.5 LAME项目 326 17.6 LAME扩展模块 330 17.7 在C代码中使用Python 对象 342 17.8 本章小结 345 17.9 习题 346 第18章 数值编程 347 18.1 Python语言中的数值 347 18.1.1 整数 348 ...

    javaSE代码实例

    16.5 获取当前正在运行的线程 372 16.6 volatile关键字的含义与使用 372 16.7 小结 373 第17章 高级线程开发 374 17.1 线程池的使用 374 17.1.1 线程池的基本思想 374 17.1.2 JavaSE 5.0中固定尺寸...

    PLSQLDeveloper下载

    命令窗口——使用PL/SQL Developer 的命令窗口能够开发并运行SQL脚本。该窗口具有同SQL*Plus相同的感观,另外还增加了一个内置的带语法加强特性的脚本编辑器。这样,您就可以开发自己的脚本,无需编辑脚本/保存脚本...

Global site tag (gtag.js) - Google Analytics