- 浏览: 442247 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (168)
- Hibernate (17)
- MySQL (7)
- struts2 (14)
- Spring (12)
- Javascript (20)
- CSS (8)
- ajax/jquery (11)
- HttpClient (6)
- HTTP (1)
- java小知识 (23)
- Servlet/JSP (5)
- Oracle (0)
- Quartz (3)
- Lucene/Nutch (12)
- c# winform (2)
- J2ME (1)
- POI (5)
- php5 (2)
- DWR(Ajax) (1)
- log4j (1)
- dom4j (3)
- 獲取郵件聯系人 (2)
- 随意 (5)
- Heritrix (1)
- ireport+jasper (1)
- 算法 (2)
- java虚拟机 (1)
- maven (2)
最新评论
-
janrick:
太感谢了,我正需要加密的函数呢
java中DES加密解密例子 -
xuganggogo:
suyang119 写道请教一下,补充的三级的可以用吗?当然可 ...
关于条件查询detachedCriteria的注意的地方 -
suyang119:
请教一下,补充的三级的可以用吗?
关于条件查询detachedCriteria的注意的地方 -
xuganggogo:
大江帅 写道var name="attriName& ...
有关在JavaScript中使用EL表达式的问题 -
大江帅:
var name="attriName"; ...
有关在JavaScript中使用EL表达式的问题
前言: Java 的类库日益庞大,所包含的类和接口也不计其数。但其中有一些非常重要的类和接口,是Java类库中的核心部分。常见的有String、Object、 Class、Collection、ClassLoader、Runtime、Process、ProcessBuilder...,熟悉这些类是学好 Java的基础。而这些类一般不容易理解,需要做深入的研究和实践才能掌握。下面是我对这些类理解和使用的一些总结。欢迎你在阅读后将你宝贵的意见和读后 感留下!
一、概述
ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。
每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process
实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。
每个进程生成器(即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 Process Builder ( "myCommand" , "myArg" ).start();
Process p = new ProcessBuilder
("myCommand", "myArg").start();
下面是一个利用修改过的工作目录和环境启动进程的例子:
- Process Builder pb = new Process Builder ( "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(new File( "myDir" ));
- Process p = pb.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(new File("myDir")); Process p = pb.start();
引用:http://lavasoft.blog.51cto.com/62575/15662
1,使用Process Builder 的例子
- package net.java2000.util;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.util.Arrays;
-
- public class TestProcess Builder {
- public static void main(String args[]) throws Exception {
- Process Builder builder = new Process Builder ( "cmd" , "/c" , "dir" );
- builder.directory (new File( "e:/ " ));
- Process process = builder.start();
- InputStream is = process .getInputStream();
- InputStreamReader isr = new InputStreamReader(is, "GBK" );
- BufferedReader br = new BufferedReader(isr);
- String line;
- System.out.printf("Output of running %s is:" , Arrays.toString(args));
- while ((line = br.readLine()) != null ) {
- System.out.println(line);
- }
- }
- }
列出了在E盘目录下的文件和文件夹。
2,还有一个例子:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; public class Test { public static String getMACAddress() { String address = ""; String os = System.getProperty("os.name"); System.out.println(os); if (os != null) { if (os.startsWith("Windows")) { try { ProcessBuilder pb = new ProcessBuilder("ipconfig", "/all"); Process p = pb.start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { if (line.indexOf("Physical Address") != -1) { int index = line.indexOf(":"); address = line.substring(index + 1); break; } } br.close(); return address.trim(); } catch (IOException e) { } }else if(os.startsWith("Linux")){ try { ProcessBuilder pb = new ProcessBuilder( "ifconfig","/all" ); Process p = pb.start(); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while((line=br.readLine())!=null){ int index=line.indexOf("硬件地址"); if(index!=-1){ address=line.substring(index+4); break; } } br.close(); return address.trim(); } catch (IOException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } } } return address; } public static void main(String[] args) { System.out.println("" + Test.getMACAddress()); } }这个例子,可以获取在xp下和linux下本机的mac地址,执行了ipconfig /all命令。
总结:
Process Builder 为进程提供了更多的控制,例如,可以设置当前工作目录,还可以改变环境参数。而Process 的功能相对来说简单的多。
Process Builder 是一个final类,有两个带参数的构造方法,你可以通过构造方法来直接创建Process Builder 的对象。而 Process 是一个抽象类,一般都通过Runtime.exec()和Process Builder .start()来间接创建其实例。
发表评论
-
正则替换标点符号的方法。解决方式还不错
2011-01-28 11:08 3256地址:http://topic.csdn.net/u/2008 ... -
hadoop环境搭建问题记录
2010-10-12 17:11 12261,错误 org.apache.hadoop.hdfs.se ... -
Java 正则表达式
2010-07-16 11:52 13021. 正则表达式规则 1.1 普通字符 字母、数字 ... -
字符串转换为Date
2010-04-24 11:04 1712查看了下SimpleDateFomart这个类。 用字符串转 ... -
正则表达式替换掉字符串中的重复字符
2009-12-11 17:51 2309str = str.replaceAll("( ... -
JFreeChart 部分API说明
2009-08-15 11:55 932http://amozon.iteye.com/blog/ ... -
反编译工具
2009-08-14 14:46 1176jad及常用命令 一、基本用法 Usage:jad ... -
JFreeChart
2009-08-10 18:35 11541,柱状图 package xu.chart.demo; ... -
java生成缩略图
2009-07-17 11:02 2313转自:http://wing929.iteye.com/blo ... -
jstl 时间处理
2009-06-24 14:06 1564jstl 中的日期格式化! [转贴 2005-10-25 1 ... -
Java Properties类
2009-05-31 14:26 2065全文转自:http://twtmnm1314.iteye.co ... -
java 的pass by value(传值)
2009-05-13 15:21 1140这里写一下java的值传递 参数是基本类型的时候: cla ... -
快速修改本機局域網IP信息
2009-05-09 13:07 2019在開發過程中,遇到需要頻繁的切換IP的問題。每次手動修改IP需 ... -
double:保留几位小数点
2009-03-06 10:03 2256java.text.DecimalFormat myforma ... -
增加环境内存--java
2009-02-13 14:50 997在eclipse中,在虚拟机环境变量VM arguments中 ... -
javaIO流读繁体中文网页的乱码问题
2009-02-01 17:09 1604IDE:eclipse IDE的编码是UTF-8(开发需要) ... -
java中DES加密解密例子
2009-02-01 17:07 4176最近在学习一些关于加 ... -
Servlets/JSP开发技术问答
2009-02-01 17:06 924学习J2EE,需要学习很多 ... -
jdk1.5新特性 ConcurrentHashMap
2009-02-01 17:06 7136曾经研究过jkd1.5新特性,其中ConcurrentHash ... -
JAVA实现在图片上写文字
2009-02-01 17:05 4840功能:直接在一张已有的图片上写字,可指定文字颜色。 ...
相关推荐
深入研究java.lang.ProcessBuilder类
hadoop2.7.1运行Wordcount错误 at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012) Exception in thread "main" java.lang.UnsatisfiedLinkError
将其放入hadoop/bin下,可解决java.lang.NullPointerException at java.lang.ProcessBuilder.start(Unknown Source),Exception in thread "main" java.lang.UnsatisfiedLinkError:等异常
个人对于java.lang.ProcessBuilder的分析
at org.apache.hadoop.util.Shell.runCommand(Shell.java:482) 2:window10操作系统下面。hadoop-2.6.4版本,解决上面这个问题的必须两个文件。详细见博客:http://www.cnblogs.com/biehongli/p/7895857.html 3:...
java 执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec
用户可以构造http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}链接,command goes here可以换成是破坏脚本的...
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1010) at org.apache.hadoop.util.Shell.runCommand(Shell.java:482) at org.apache.hadoop.util.Shell.run(Shell.java:455) at org.apache.hadoop....
Webshells集合BCEL字节码的JSP Webshell自定义类加载器的JSP ...类加载器加载的JSP Webshell java.lang.ProcessImpl JSP Webshell java.lang.ProcessBuilder Webshell MethodAccessor.invoke绕...
奎因使用ProcessBuilder运行时在Java中进行非空查询-“计算机娱乐:自动复制自动机”让·米洛(Jean Millo),1972年基本上是在使用ProcessBuilder充当再现代理的全新概念上制作的。 该程序输出自己的源代码,并且...
通过使用单个类ProcessExecutor ,用户可以从java.lang.ProcessBuilder和获得功能。 安装 项目工件可在。 要将其包含在您的Maven项目中,则必须指定依赖项。 ... < groupId>org.zeroturnaround < artifactId>...
主要介绍了Java如何基于ProcessBuilder类调用外部程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
获取URL信息,主要是使用URLConnection类,GetUrlInfo.java; web浏览器,webbrowser.java; 获取IP地址和域名,GetIpAddress.java; Http客户端,httpClient.java; 基本socket编程,介绍socket编程的基本步骤,启动...
ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用ProcessBuilder非阻塞是调用
本文档介绍了如何在Java中使用ProcessBuilder类执行DOS命令。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用Java代码获取系统的网络配置信息。 内容概要 本文档涵盖以下内容: 使用Java代码...
本文档介绍了如何在Java中使用ProcessBuilder类执行DOS命令。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用Java代码删除文件。 内容概要 本文档涵盖以下内容: 使用Java代码执行DOS命令 使用...
本文档介绍了如何在Java中使用ProcessBuilder类执行常用的DOS命令。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用cd命令回到上级目录以及回到根目录。 内容概要 本文档涵盖以下内容: 回到...
本文档介绍了如何在Java中使用ProcessBuilder类执行ping命令,以检测主机的网络连通性。我们提供了详细的步骤说明,并附带一个简单的源码示例,演示如何使用Java代码执行ping命令并解析结果。 内容概要 本文档涵盖...
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
java-cmd-exec 一个简单的ProcessBuilder包装器 例子 公共类Md5sumCommand扩展了Command { @Override protected File directory() { return new File("."); } @Override protected String command() { ...