`
dragon0929
  • 浏览: 77631 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ProcessBuilder java 调用系统application(转)

阅读更多

一、概述
      ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。
      每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。 (我在《深入研究java.lang.Runtime类》中讲过,进程也可以由Runtime.exec()启动。)

 
每个进程生成器(即ProcessBuilder对象)管理这些进程属性:
命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有)。在此,表示有效的操作系统命令的字符串列表是依赖于系统的。例如,每一个总体变量,通常都要成为此列表中的元素,但有一些操作系统,希望程序能自己标记命令行字符串——在这种系统中,Java 实现可能需要命令确切地包含这两个元素。
环境 是从变量 到值 的依赖于系统的映射。初始值是当前进程环境的一个副本(请参阅 System.getenv())。
工作目录 。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名。
redirectErrorStream 属性 。最初,此属性为 false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。
 
      既然有Process类,那为什么还要发明个ProcessBuilder类呢?ProcessBuilder和Process两个类有什么区别呢?
原来,ProcessBuilder为进程提供了更多的控制,例如,可以设置当前工作目录,还可以改变环境参数。而Process的功能相对来说简单的多。
      ProcessBuilder是一个final类,有两个带参数的构造方法,你可以通过构造方法来直接创建ProcessBuilder的对象。而Process是一个抽象类,一般都通过Runtime.exec()和ProcessBuilder.start()来间接创建其实例。
 
注意:
      修改进程构建器的属性将影响后续由该对象的 start() 方法启动的进程,但从不会影响以前启动的进程或 Java 自身的进程。
      ProcessBuilder类不是同步的。如果多个线程同时访问一个 ProcessBuilder,而其中至少一个线程从结构上修改了其中一个属性,它必须 保持外部同步。
 
很容易启动一个使用默认工作目录和环境的新进程:
 Process p = new ProcessBuilder("myCommand", "myArg").start();
下面是一个利用修改过的工作目录和环境启动进程的例子:
 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory("myDir");
 Process p = pb.start();
 要利用一组明确的环境变量启动进程,在添加环境变量之前,首先调用 Map.clear()。
 
二、API预览
    构造方法摘要
    ProcessBuilder(List<String> command)
      利用指定的操作系统程序和参数构造一个进程生成器。
    ProcessBuilder(String... command)
      利用指定的操作系统程序和参数构造一个进程生成器。
 
    方法摘要
    command()
      返回此进程生成器的操作系统程序和参数。
    command(List<String> command)
      设置此进程生成器的操作系统程序和参数。
    command(String... command)
      设置此进程生成器的操作系统程序和参数。
    directory()
      返回此进程生成器的工作目录。
    directory(File directory)
      设置此进程生成器的工作目录。
    environment()
      返回此进程生成器环境的字符串映射视图。
    redirectErrorStream()
      通知进程生成器是否合并标准错误和标准输出。
    redirectErrorStream(boolean redirectErrorStream)
      设置此进程生成器的 redirectErrorStream 属性。
    start()
      使用此进程生成器的属性启动一个新进程。
 
三、常见应用
      若要使用ProcessBuilder创建一个进程,只需要创建ProcessBuilder的一个实例,指定该进程的名称和所需参数。要执行此程序,调用该实例上的start()即可。下面上一个执行Windows记事本的例子。注意它将要编辑的文件名指定为一个参数。
class PBDemo {
        public static void main(String args[]) {
                try {
                        ProcessBuilder proc = new ProcessBuilder("notepad.exe" , "testfile" );
                        proc.start();
                } catch (Exception e) {
                        System.out.println("Error executing notepad." );
                }
        }
}
分享到:
评论

相关推荐

    java调用window操作系统文本转语音并生成播放文件

    在Java编程环境中,调用Windows操作系统来实现文本转语音(Text-to-Speech, TTS)并生成播放文件是一项常见的需求。这项技术可以帮助开发者为应用程序添加语音合成功能,尤其适用于无障碍应用、语音助手或者多媒体...

    exchange/powershell,Java调用powershell开通邮箱

    标题 "exchange/powershell,Java调用powershell开通邮箱" 暗示了这是一个关于使用Java编程语言调用PowerShell脚本在Exchange服务器上创建邮箱的教程或项目。Exchange是微软提供的一款企业级电子邮件服务器软件,而...

    Java如何基于ProcessBuilder类调用外部程序

    Java如何基于ProcessBuilder类调用外部程序 Java中的ProcessBuilder类提供了一种方便的方式来调用外部程序。通过ProcessBuilder类,可以轻松地执行外部命令,并获取其输出结果。在本文中,我们将详细介绍如何使用...

    java调用视频转换工具ffmpeg.zip

    在Java中调用FFmpeg,通常有两种方式:直接执行系统命令和使用Java库。直接执行命令是通过Runtime.exec()方法或ProcessBuilder类来调用FFmpeg的命令行工具,例如: ```java String command = "ffmpeg -i input.mp4 ...

    ProcessBuilder非阻塞是调用

    在 Java 中,使用 ProcessBuilder 类可以执行外部命令或程序,例如执行系统命令、运行可执行文件等。但是,默认情况下,ProcessBuilder 类的调用是阻塞的,即调用线程会等待外部命令或程序的执行完成后才继续执行。...

    用java程序调用ffmpeg执行视频文件格式转换flv

    这通常涉及构建命令行参数,然后使用Java的Runtime或ProcessBuilder API来执行外部进程。转换完成后,返回新生成的AVI文件路径供`processFLV()`使用。 `processFLV()`方法则负责调用FFmpeg将文件转换为FLV。同样,...

    Java调用系统执行程序(OS Command)

    总的来说,Java通过`Runtime`和`ProcessBuilder`提供了一种强大的方式来调用系统命令和执行外部程序。然而,必须谨慎处理这些调用,以防止潜在的安全问题,并确保正确处理命令的输入、输出和错误流。在实际开发中,...

    Java调用Linux CenterOS系统安装的OpenOffice4报错

    解决这些问题通常需要结合日志分析,调试代码,以及对Linux和Java系统调用的深入理解。在实际应用中,为了提高稳定性和健壮性,可以考虑使用第三方库,如Apache POI或JODConverter,它们提供了更高级别的抽象,能更...

    surfer二次开发-java调用exe

    本文将深入探讨如何通过Java来调用VB编写的Surfer二次开发程序,实现等值线的生成。 首先,`surfer.dll`是一个动态链接库文件,它是Surfer软件的核心组件,包含了Surfer的各种功能接口。在VB(Visual Basic)中,...

    java调用openssl生成证书

    在Java中调用OpenSSL,我们需要了解如何在Java程序中执行系统命令,这通常通过`Runtime.getRuntime().exec()`或`ProcessBuilder`类来实现。 以下是生成证书的基本步骤: 1. **生成私钥**:使用`openssl genpkey`...

    java工程 实现调用系统命令ping

    本示例探讨了如何在Java工程中实现调用系统命令“ping”来达到这个目的。首先,我们需要理解“ping”命令的基本原理:它通过发送ICMP(Internet Control Message Protocol)回显请求数据包到目标主机,然后接收相应...

    java 调用 ffmpeg 进行视频转换以及截图.rar

    总的来说,"java 调用 ffmpeg 进行视频转换以及截图"的实践涉及了Java进程控制、系统命令调用、多媒体处理等多方面知识。通过合理运用这些技术,开发者可以在Java应用程序中实现丰富的视频处理功能,满足各种多媒体...

    Java调用命令行!

    首先,Java通过`Runtime`类和`ProcessBuilder`类提供了调用操作系统命令的能力。`Runtime.getRuntime().exec()`方法是最常用的方式,它允许我们执行一个外部命令。例如,要执行简单的`ls`命令(在Unix/Linux系统中列...

    java调用DOS命令

    Java调用DOS命令是指在Java程序中执行操作系统级别的命令,比如Windows下的CMD命令或Linux下的Shell命令。这种功能在很多场景下都很有用,比如自动化脚本、文件操作、系统管理等。Java提供了Runtime类和...

    java上传调用ffmpeg转码截图截取视频

    在Java中,我们可以使用Runtime类或ProcessBuilder类来执行系统命令。例如,我们可以创建一个方法,将FFmpeg的命令字符串化,然后通过这些类执行: ```java public void executeFFmpegCommand(String command) { ...

    Java中调用Python代码

    4. **使用进程通信**: 另一种方法是通过启动Python脚本作为独立的进程,然后使用Java的`ProcessBuilder`或`Runtime.exec()`来执行Python命令。这种方法较为通用,但需要处理进程间通信(如标准输入/输出流)。 5. *...

    java调用本地浏览器的demo

    Java调用本地浏览器的示例,通常涉及到Java与操作系统交互的能力,这主要通过Java的`Runtime`类或者`ProcessBuilder`类实现。这两个类允许Java程序执行系统命令,例如打开一个本地已安装的浏览器来加载特定的URL。...

    java中调用本地exe文件

    在Java编程语言中,有时我们需要实现与操作系统交互的功能,例如执行一些特定的本地应用程序或脚本等。本文将详细介绍如何在Java中调用本地exe文件,并解析提供的代码示例。 ### 一、Java中调用本地exe文件的基本...

    使用java调用windows WIN脚本

    总结来说,"使用Java调用Windows WIN脚本"涉及到Java与操作系统交互的关键技术,包括`Runtime`和`ProcessBuilder`的使用、理解批处理和VBS脚本的工作原理,以及通过第三方库如j-Interop来实现更复杂的操作,如调用...

    java调用python脚本

    例如,"Java调用Python脚本"是一个常见的需求,特别是在数据处理、科学计算或机器学习等场景中,Python的强大库可以与Java的稳定性和企业级应用能力相结合。本教程将详细讲解如何在Java程序中调用Python脚本。 首先...

Global site tag (gtag.js) - Google Analytics