`

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

分享到:
评论

相关推荐

    执行exe文件并获取执行结果

    在Java编程中,有时我们需要与操作系统进行交互,执行外部程序(如.exe文件)并获取其输出结果。这对于系统集成、自动化测试或者调用系统命令行工具等场景非常常见。本篇将详细介绍如何在Java中执行.exe文件并捕获...

    java代码-//运行cmd命令并返回结果

    在Java编程中,有时我们需要执行操作系统级别的命令,例如运行`cmd`命令,获取命令的输出结果,这通常涉及到进程的创建和管理。本篇将详细讲解如何在Java中实现这一功能,以及涉及的相关知识点。 首先,Java提供了...

    关于java获取操作系统信息

    本文将基于给定的文件信息,深入探讨如何利用Java来获取操作系统的关键信息,并对每一条命令及其返回值进行详细解释。 ### 1. 获取Java运行时环境版本信息 #### 1.1 `java.version` 该属性返回当前Java运行时环境...

    Java调用Linux命令

    根据提供的文件信息,我们可以深入探讨如何在Java程序中调用Linux命令,并且解析与之相关的技术要点。 ### Java调用Linux命令 Java提供了一种强大的机制来执行操作系统级别的任务,其中包括调用Linux命令。实现这...

    Java调用应用程序和Dos中的命令

    在Java中,`java.lang.Runtime`类提供了与当前运行时系统交互的方法,其中包括`exec()`方法,该方法允许我们启动一个新的进程并控制其输入和输出流。这对于需要与操作系统交互的任务非常有用。 #### 二、Runtime类...

    java 16.0.1 windows.zip

    在下载并解压"java 16.0.1 windows.zip"后,用户可以找到包含Java SDK的所有组件,如Java运行时环境(JRE)、Java开发工具包(JDK),以及相关的文档和示例。安装或解压后,开发者可以利用这个版本的Java进行编程,...

    干货:Jenkins Pipeline调用shell、python、java、groovy脚本的正确使用姿势.doc

    例如,使用 `result = sh(script: "", returnStdout: true).trim()` 可以执行 shell 命令并获取其返回值。 使用 Groovy 脚本 Groovy 脚本可以用来实现一些复杂的功能。例如,从配置文件中读取 URL 信息,可以使用...

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

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

    java新手代码适合初学者简单经典.zip

    - 初学者将学习如何使用JDK中的javac命令编译源代码,并通过java命令运行已编译的字节码文件。 8. **代码规范** - 遵循良好的编程习惯,如使用有意义的变量名,保持代码整洁,以及注释的使用,这些都在示例中起到...

    C和Java互调示例

    2. 生成JNI头文件:运行`javah`命令,根据Java源代码生成包含C函数原型的头文件。 3. 实现C函数:在C代码中,实现`JNIEXPORT`和` JNICALL`修饰的函数,这是JNI约定的函数声明方式。 4. 动态加载库:在Java代码中,...

    java单词java单词.doc

    * Java:Java 解释命令,用于将字节码文件解释成机器码并执行。 * Javadoc:Java 文档生成命令,用于生成 Java 源代码的文档。 * Classpath:类路径,用于指定 Java 类的查找路径。 * Version:版本,用于标识 Java ...

    java 结束word进程

    在Java中获取PID并传递给`taskkill`命令,代码可能如下: ```java Process process = Runtime.getRuntime().exec("taskkill /F /IM winword.exe"); ``` 这里的`/F`参数表示强制结束,`/IM`参数后面跟的是进程的...

    C++调用java方式

    5. **处理结果**: 如果Java方法有返回值,C++代码需要处理这些结果。 6. **释放资源**: 在完成调用后,记得释放分配的JNI资源,如局部引用。 **示例文件分析** - `Sample2.c`和`Sample2.cpp`: 这两个文件可能是C++...

    全国2011年10月自学考试Java语言程序设计(一)

    3. 编译:使用javac命令检查并编译源代码,生成字节码。 4. 测试:运行程序,调试错误,确保程序正确无误。 5. 发布:将最终的程序和所有依赖打包,供用户使用。 【Java程序的种类】 1. Applet:内嵌于Web页面中,...

    S1 5.0 JAVA 1-9章测试题

    而`java`命令则用于执行编译后的字节码文件,即运行JAVA程序。 2. 字节码与可执行代码: JAVA源程序被编译成字节码,这是一种平台无关的中间语言,由JAVA虚拟机(JVM)负责解释执行。字节码不是直接的机器代码,...

    .JAVA关键字和英语单词

    6. **classpath**:指定查找类文件的路径,是Java运行时环境寻找类的重要配置。 7. **version**:用于查询Java版本信息。 8. **public**:访问修饰符,表示类、接口或方法可以被任何其他类访问。 9. **class**:...

    一个java程序员几年的技术总结

    - **JRE(Java Runtime Environment)**:Java运行环境,包含Java虚拟机(JVM)和核心类库。 **2. 安装配置** - **安装**:通常情况下,安装JDK会自动安装JRE。 - **配置**:设置环境变量`JAVA_HOME`指向JDK...

    java中调用本地exe文件

    - **Runtime类**:提供了一个运行时对象,通过该对象可以访问当前Java应用程序与运行系统之间的接口。 - **ProcessBuilder类**:提供了更灵活的方式来创建新的进程。它允许指定命令行参数、环境变量以及重定向标准...

    java-11-openjdk-11.0.7.10-1.windows.redhat.x86_64.zip

    在下载的压缩包"java-11-openjdk-11.0.7.10-1.windows.redhat.x86_64.zip"中,包含了OpenJDK 11.0.7的全部组件,包括Java运行时环境(JRE)、开发工具(如javac编译器、jar打包工具等)、库文件和必要的配置文件。...

Global site tag (gtag.js) - Google Analytics