Java Process类的详解及实例代码

Java Process类的详解

前言:

今天用了下Java.lang.Process类,只是初步的学习,并没有深入实践,因为感觉它的用途并不是很大,偶尔才可能用上,如果要经常使用它的人可以自行参考JDk文档。

对Process类的简要说明:

Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序  该类提供进程的输入、执行输出到进程、等待进程的完成和检查进程的退出状态及销毁进程的方法

ProcessBuilder.start()和Runtime.exec方法创建一个本机进程并返回Process子类的一个实例,该实例可以控制进程并获取相关的信息

其它的概要请参考JDK文档

下面就开始举几个简单的示例:

(1)执行简单的DOS命令,如打开一个记事本

package com.iwtxokhtd.other;  

import java.io.IOException;  

public class ProcessTest {  

  public static void main(String[] args) {
    try {
            Process proc=Runtime.getRuntime().exec("notepad");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }  

  }  

}
package com.iwtxokhtd.other; 

import java.io.IOException; 

public class ProcessTest { 

  public static void main(String[] args) {
    try {
            Process proc=Runtime.getRuntime().exec("notepad");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } 

  } 

}

(2)使用它的其它构造方法执行相关的命令,如下例:

package com.iwtxokhtd.other;  

import java.io.IOException;  

public class ProcessTest {  

  public static void main(String[] args) {
    try {  

      String exeFullPathName="C:/Program Files/Internet Explorer/IEXPLORE.EXE";
      String message="www.google.com";
      String []cmd={exeFullPathName,message};
      Process proc=Runtime.getRuntime().exec(cmd);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }  

  }  

}
package com.iwtxokhtd.other; 

import java.io.IOException; 

public class ProcessTest { 

  public static void main(String[] args) {
    try { 

      String exeFullPathName="C:/Program Files/Internet Explorer/IEXPLORE.EXE";
      String message="www.google.com";
      String []cmd={exeFullPathName,message};
      Process proc=Runtime.getRuntime().exec(cmd);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } 

  } 

}

执行上述命令可以打开Google网站

(3)列出系统正在运行的所有进程信息

package com.iwtxokhtd.other;  

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;  

public class ListAllProcessTest {  

  //列出所有的进程信息
  public static void main(String[] args) {
    BufferedReader br=null;
    try {
      Process proc=Runtime.getRuntime().exec("tasklist");
      br=new BufferedReader(new InputStreamReader(proc.getInputStream()));
      @SuppressWarnings("unused")
      String line=null;
      System.out.println("打印所有正在运行的进程信息");
      while((line=br.readLine())!=null){
        System.out.println(br.readLine());
      }
    } catch (IOException e) {
      e.printStackTrace();
    }finally{
      if(br!=null){
        try {
          br.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }  

  }  

}
package com.iwtxokhtd.other; 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; 

public class ListAllProcessTest { 

  //列出所有的进程信息
  public static void main(String[] args) {
    BufferedReader br=null;
    try {
      Process proc=Runtime.getRuntime().exec("tasklist");
      br=new BufferedReader(new InputStreamReader(proc.getInputStream()));
      @SuppressWarnings("unused")
      String line=null;
      System.out.println("打印所有正在运行的进程信息");
      while((line=br.readLine())!=null){
        System.out.println(br.readLine());
      }
    } catch (IOException e) {
      e.printStackTrace();
    }finally{
      if(br!=null){
        try {
          br.close();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    } 

  } 

}

(4)判断一个具体的进程是否正在运行,如下例:

package com.iwtxokhtd.other;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class FindProcessExeTest
{
  public static void main(String []args){  

    if(findProcess("QQ.exe")){
      System.out.println("------判断指定的进程是否在运行------");
      System.out.println("QQ.exe该进程正在运行!");
    }else{
      System.out.println("------判断指定的进程是否在运行------");
      System.out.println("QQ.exe该进程没有在运行!");
    }  

  }
  public static boolean findProcess(String processName){
    BufferedReader br=null;
    try{  

      //下面这句是列出含有processName的进程图像名
      Process proc=Runtime.getRuntime().exec("tasklist /FI /"IMAGENAME eq "+processName+"/"");
      br=new BufferedReader(new InputStreamReader(proc.getInputStream()));
      String line=null;
      while((line=br.readLine())!=null){
        //判断指定的进程是否在运行
        if(line.contains(processName)){
          return true;
        }
      }  

      return false;
    }catch(Exception e){
      e.printStackTrace();
      return false;
    }finally{
      if(br!=null){
        try{
          br.close();
        }catch(Exception ex){
        }
      }  

    }
  }
}
package com.iwtxokhtd.other;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class FindProcessExeTest
{
  public static void main(String []args){ 

    if(findProcess("QQ.exe")){
      System.out.println("------判断指定的进程是否在运行------");
      System.out.println("QQ.exe该进程正在运行!");
    }else{
      System.out.println("------判断指定的进程是否在运行------");
      System.out.println("QQ.exe该进程没有在运行!");
    } 

  }
  public static boolean findProcess(String processName){
    BufferedReader br=null;
    try{ 

      //下面这句是列出含有processName的进程图像名
      Process proc=Runtime.getRuntime().exec("tasklist /FI /"IMAGENAME eq "+processName+"/"");
      br=new BufferedReader(new InputStreamReader(proc.getInputStream()));
      String line=null;
      while((line=br.readLine())!=null){
        //判断指定的进程是否在运行
        if(line.contains(processName)){
          return true;
        }
      } 

      return false;
    }catch(Exception e){
      e.printStackTrace();
      return false;
    }finally{
      if(br!=null){
        try{
          br.close();
        }catch(Exception ex){
        }
      } 

    }
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java异常处理运行时异常(RuntimeException)详解及实例

      Java异常处理运行时异常(RuntimeException)详解及实例 RuntimeException RunntimeException的子类: ClassCastException 多态中,可以使用Instanceof 判断,进行规避 ArithmeticException 进行if判断,如果除数为0,进行return NullPointerException 进行if判断,是否为null ArrayIndexOutOfBoundsException 使用数组length属性,避免越

  • oracle如何使用java source调用外部程序

    需求 Oracle调用第三方外部程序.Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件. 源码 java source create or replace and compile java source named jv_run_extpro as import java.io.*; import java.lang.*; import java.util.*; import java.sql.*; import oracle.sql.*; publiccla

  • 解析Java的Spring框架的BeanPostProcessor发布处理器

    BeanPostProcessor 的接口定义,可以实现提供自己的实例化逻辑,依赖解析逻辑等,也可以以后在Spring容器实例化完毕,配置和初始化一个bean通过插入一个或多个的BeanPostProcessor实现一些自定义逻辑回调方法实现. 可以配置多个的BeanPostProcessor接口,控制这些的BeanPostProcessor接口,通过设置属性顺序执行顺序提供的BeanPostProcessor实现了Ordered接口. BeanPostProcessor可以对bean(或对象)

  • Java 进程执行外部程序造成阻塞的一种原因

    查了好多资料,差点就动手翻Java源码了,最后结合一篇文章(忘记出处了),想到了输出流会阻塞进程执行. Java进程执行有一个输入流,两个输出流(相对于外部程序).当两个输出流有内容输出,而Java执行程序没有及时清空输出流时就会阻塞进程. 现贴出代码,希望能帮助到有需要的同行: 复制代码 代码如下: /**  * pdf转swf函数  * @param path 输入输出文件路径  * @param inputFileName 输入文件名  * @param outputFileName 输出

  • Java编程使用Runtime和Process类运行外部程序的方法

    本文实例讲述了Java编程使用Runtime和Process类运行外部程序的方法.分享给大家供大家参考,具体如下: 使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程序. 1. exec(String command) 2. exec(String command, String envp[], File dir) 3. exec(String cmd, String envp[]) 4. exec(String cmdarray[]) 5. exec(

  • Java Runtime类详解_动力节点Java学院整理

    一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.一般不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用.一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为. 当不被信任的代码调用任何Runtime方法时,常常会引起SecurityExc

  • Java Process详解及实例

    Runtime Java可以通过Runtime来调用其他进程,如cmd命令,shell文件的执行等.可以应该该类设置系统时间,执行shell文件.此处记录几个有用应用如下. 设置本地时间 可以调用cmd /c date命令,完成本地时间设置,不过这个命令在win7下可以使用,但是win10需要管理员权限,可能无法设置系统时间.win7下使用Java实现修改本地时间代码如下,需要注意的是waitFor是必须的,否则无法立即生效. /** * 设置本地日期 * @param date yyyy-MM

  • Java 常见异常(Runtime Exception )详细介绍并总结

    本文重在Java中异常机制的一些概念.写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这篇文章迅速回忆起来. 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果.这样做有如下的弊端:例如函数返回-1代表出现异常

  • Java基于Runtime调用外部程序出现阻塞的解决方法

    本文实例讲述了Java基于Runtime调用外部程序出现阻塞的解决方法, 是一个很实用的技巧.分享给大家供大家参考.具体分析如下: 有时候在java代码中会调用一些外部程序,比如SwfTools来转换swf.ffmpeg来转换视频等.如果你的代码这样写:Runtime.getRuntime().exec(command),会发现程序一下就执行完毕,而在命令行里要执行一会,是因为java没有等待外部程序的执行完毕,此时就需要使用阻塞,来等待外部程序执行结果: InputStream stderr

  • Java Process类的详解及实例代码

    Java Process类的详解 前言: 今天用了下Java.lang.Process类,只是初步的学习,并没有深入实践,因为感觉它的用途并不是很大,偶尔才可能用上,如果要经常使用它的人可以自行参考JDk文档. 对Process类的简要说明: Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序  该类提供进程的输入.执行输出到进程.等待进程的完成和检查进程的退出状态及销毁进程的方法 ProcessBuilder.start()和Runtime.exec方法创建

  • java 嵌套类的详解及实例代码

    java 嵌套类 到现在为止,我们都是在Java文件中直接定义类.这样的类出现在包(package)的级别上.Java允许类的嵌套定义. 这里将讲解如何在一个类中嵌套定义另一个类. 内部类 Java允许我们在类的内部定义一个类.如果这个类是没有static修饰符,那么这样一个嵌套在内部的类称为内部类(inner class). 内部类被认为是外部对象的一个成员.在定义内部类时,我们同样有访问权限控制(public, private, protected). 在使用内部类时,我们要先创建外部对象.

  • Java NumberFormat 类的详解及实例

     Java NumberFormat 类的详解及实例 概要: NumberFormat 表示数字的格式化类, 即:可以按照本地的风格习惯进行数字的显示. 此类的定义如下: public abstract class NumberFormat extends Format MessageFormat .DateFormat .NumberFormat 是 Format 三个常用的子类,如果要想进一步完成一个好的国际化程序,则肯定需要同时使用这样三个类完成,根据不同的国家显示贷币的形式. 此类还是在

  • java多线程编程技术详解和实例代码

     java多线程编程技术详解和实例代码 1.   Java和他的API都可以使用并发. 可以指定程序包含不同的执行线程,每个线程都具有自己的方法调用堆栈和程序计数器,使得线程在与其他线程并发地执行能够共享程序范围内的资源,比如共享内存,这种能力被称为多线程编程(multithreading),在核心的C和C++语言中并不具备这种能力,尽管他们影响了JAVA的设计. 2.   线程的生命周期 新线程的生命周期从"新生"状态开始.程序启动线程前,线程一直是"新生"状态:

  • Java中初始化块详解及实例代码

    Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量,即static修饰的数据成员. 非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量. 非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被运行. 括号里的是初始化块,这里面的代码在创建Java对象时执行,而且在构造器之前执行! 其实初始化块就是构造器的补充,初始化块是

  • java DataInputStream和DataOutputStream详解及实例代码

    java DataInputStream和DataOutputStream详解 操作基本数据类型的流 DataInputStream DataOutputStream import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public c

  • Java 垃圾回收机制详解及实例代码

     Java 垃圾回收机制详解 乍一看,垃圾回收所做的事情应当恰如其名--查找并清除垃圾.事实上却恰恰相反.垃圾回收会跟踪所有仍在使用的对象,然后将剩余的对象标记为垃圾.牢记了这点之后,我们再来深入地了解下这个被称为"垃圾回收"的自动化内存回收在JVM中到底是如何实现的. 手动管理内存 在介绍现代版的垃圾回收之前,我们先来简单地回顾下需要手动地显式分配及释放内存的那些日子.如果你忘了去释放内存,那么这块内存就无法重用了.这块内存被占有了却没被使用.这种场景被称之为内存泄露. 下面是用C写

  • Java 回调机制(CallBack) 详解及实例代码

     Java 回调机制 概要: 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题.但是,对于初学的我来说,缺了一个循序渐进的过程.此处,将我对回调机制的个人理解,按照由浅到深的顺序描述一下,如有不妥之处,望不吝赐教! 开始之前,先想象一个场景:幼稚园的小朋友刚刚学习了10以内的加法. 第1章. 故事的缘起 幼师

  • Java 线程池ExecutorService详解及实例代码

    Java 线程池ExecutorService 1.线程池 1.1什么情况下使用线程池 单个任务处理的时间比较短. 将需处理的任务的数量大. 1.2使用线程池的好处 减少在创建和销毁线程上所花的时间以及系统资源的开销. 如果不使用线程池,有可能造成系统创建大量线程而导致消耗系统内存以及"过度切换"; 2.ExecutorService和Executors 2.1简介 ExecutorService是一个接口,继承了Executor, public interface ExecutorS

  • Java 调用天气Webservice详解及实例代码

    Java调用天气Webservice的小应用 废话不多说,直接贴代码: CityReq.java package com.weather; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="getWeatherbyCityName",namespace="http://WebXml.com.cn/

随机推荐