当前位置: 首页 > news >正文

网站版面做好宁波网站设计相信荣胜网络

网站版面做好,宁波网站设计相信荣胜网络,深圳网站建设案例,郴州网站设计较好的公司ProcessBuilder类的介绍及使用 前言 在做一个项目的时候需要用到运行时动态执行JAVA命令#xff0c;一开始的思路是运行时生成bat脚本#xff0c;然后通过Runtime类的exec方法之行bat脚本#xff0c;但是此方法不好的地方在于脚本执行时会弹出一个cmd程序界面框。后面在参…ProcessBuilder类的介绍及使用 前言 在做一个项目的时候需要用到运行时动态执行JAVA命令一开始的思路是运行时生成bat脚本然后通过Runtime类的exec方法之行bat脚本但是此方法不好的地方在于脚本执行时会弹出一个cmd程序界面框。后面在参考YANG的源码时发现了另一种运行时执行JAVA命令的方法由此延申了解了PorcessBuilder类的作用及用法。 正文 ProcessBuilder类是java.lang包下的基础类在使用时无需导入可以直接使用。它主要用于创建和运行各类外部程序例如javac,java等等。 –构造方法– 它(List command)它(String… command) –常用方法– void command(String... command) 用于将待执行命令及参数传递给它Process start() 执行命令并返回一个Process对象用于获取对执行程序的输入和输出void directory(File base) 用于设置待执行命令的工作目录可以不设置–使用技巧– 1、在使用它的时候建议将其封装一下这样更便于使用例如 public class ProcessUtil {public static void process(String... command) throws Exception { ​ process((File)null, command);}public static void process(ListString commandList) throws Exception { ​ process((File)null, (String[])commandList.toArray(new String[0]));}public static void process(File base, String... command) throws Exception { ​ ProcessBuilder processBuilder new ProcessBuilder(new String[0]); ​ if (base ! null) { ​ processBuilder.directory(base); ​ } ​ processBuilder.command(command); ​ Process process processBuilder.start();......1. 添加一个input2string()方法用于将执行程序获得的输出转换为String对象便于输出例如public static String input2str(InputStream inputStream) throws UnsupportedEncodingException { ​ ByteArrayOutputStream outSteam new ByteArrayOutputStream(); ​ byte[] buffer new byte[1024]; ​ try { ​ int len; ​ while((len inputStream.read(buffer)) ! -1) { ​ outSteam.write(buffer, 0, len); ​ } ​ outSteam.close(); ​ inputStream.close(); ​ } catch (IOException var5) { ​ var5.printStackTrace(); ​ } ​ return outSteam.toString(utf-8);}总结 它作为一个JAVA底层类使开发者能够与操作系统进行强大的互动而且在使用它进行系统命令的调用时能够在后台进行不会有使用Runtime类时弹出cmd命令执行框的困扰十分方便。在后面的学习当中可以进一步了解一下System类的用法。 ProcessBuilder 1. 简介 ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类此类用于创建操作系统进程它提供一种启动和管理进程也就是应用程序的方法。在J2SE 1.5之前都是由Process类处来实现进程的控制管理。 每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用以利用相同的或相关的属性创建新的子进程。 2. 示例 下面是一个使用修改过工作目录和环境启动进程的例子并重定向标准输出和标准错误到自定义日志文件。 ProcessBuilder pb new ProcessBuilder(myCommand, myArg1, myArg2);//设置环境变量初始值是当前进程环境的一个副本System.getenv()MapString, String env pb.environment(); env.put(VAR1, myValue);env.remove(OTHERVAR);env.put(VAR2, env.get(VAR1) suffix);//设置工作目录pb.directory(new File(myDir)); File log new File(log);//redirectErrorStream 属性默认值为false意思是子进程的标准输出和错误输出被发送给两个独立的流这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。 //如果将值设置为 true标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下合并的数据可从 Process.getInputStream() 返回的流读取而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。pb.redirectErrorStream(true);pb.redirectOutput(Redirect.appendTo(log));//启动进程Process p pb.start();assert pb.redirectInput() Redirect.PIPE;//重定向标准输出到日志assert pb.redirectOutput().file() log;assert p.getInputStream().read() -1;3. ProcessBuilder API //构造方法 //利用指定的操作系统程序和参数构造一个进程生成器。 ProcessBuilder(ListString command) //利用指定的操作系统程序和参数构造一个进程生成器。 ProcessBuilder(String… command) //方法 //返回此进程生成器的操作系统程序和参数。 command() //设置此进程生成器的操作系统程序和参数。 command(ListString command) //设置此进程生成器的操作系统程序和参数。 command(String… command) //返回此进程生成器的工作目录。 directory() //设置此进程生成器的工作目录。 directory(File directory) //返回此进程生成器环境的字符串映射视图。 environment方法获得运行进程的环境变量,得到一个Map,可以修改环境变量 environment() //返回进程生成器是否合并标准错误和标准输出true为合并false为不合并 redirectErrorStream() //设置此进程生成器的 redirectErrorStream 属性。默认值为false不合并 redirectErrorStream(boolean redirectErrorStream) //使用此进程生成器的属性启动一个新进程。 start() Process和ProcessBuilder入门 java在本地执行命令时是否遇到过问题 执行长输出的命令会卡住的情况用Runtime.exe() 执行命令当命令的输出过长时会导致程序卡住当时查的网上资料解决了这个问题开启了2个线程分别打印标准输出和标准错误输出这样就能避免卡住。 Process 创建的是进程因为在本地 ps 会看到一个执行的进程。 ProcessBuilder 1.概述 ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类此类用于创建操作系统进程它提供一种启动和管理进程也就是应用程序的方法。在J2SE 1.5之前都是由Process类处来实现进程的控制管理。 每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。 使用ProcessBuilder比使用Process的好处在于我们不仅仅可以去执行一个应用程序还可以对执行进程进行更多的管理工作比如获取进程的执行信息包括标准输出、标准错误输出设置当前工作目录改变环境参数。 ProcessBuilder用于创建操作系统进程每个ProcessBuilder实例都管理一个进程属性集合。通过调用start()方法可以通过这些属性创建出一个进程。start()方法可以被多次调用来创建多个独立的进程。 每个builder管理着下面的进程属性 cmmand 命令比如{“ipcofig”,“/all”} environment 环境变量子进程会直接使用当前进程的环境变量。环境变量是独立的因此可以被修改但是不会影响其他的进程。 directory 工作目录如果返回的是Null,说明当前目录使用的是系统变量user.dir所在的目录。 redirectErrorStream属性 默认是false。Flase意味着标准输出和标准错误是两个独立的流可以通过Process.getInputStream()和Process.getErrorStream()方法获得。 如果这个值设置为true那么标准错误将会合并到标准输出中并且发往同一个目标地址这种特性使得错误消息可以很方便的和输出消息一起管理此时如果你再想要单独获取错误输出流就会得到null。 线程安全 注意这个类不是线程安全的因此如果多个线程使用ProcessBuilder实例并且修改属性那么可能会造成冲突。因此需要在外面进行线程同步。 启动 可以简单的向下面这样启动一个进程 Process p new ProcessBuilder(myCommand, myArg).start();样例 下面是官方文档中给出的样例样例中修改了工作目录以及环境变量并且把标准错误和标准输出合并输出到日志文件中 ProcessBuilder pb new ProcessBuilder(myCommand, myArg1, myArg2);MapString, String env pb.environment();env.put(VAR1, myValue);env.remove(OTHERVAR);env.put(VAR2, env.get(VAR1) suffix);pb.directory(new File(myDir));File log new File(log);pb.redirectErrorStream(true);pb.redirectOutput(Redirect.appendTo(log));Process p pb.start();assert pb.redirectInput() Redirect.PIPE;assert pb.redirectOutput().file() log;assert p.getInputStream().read() -1;ProcessBuilder(XXX).start()和Runtime.exec(XXX)功能相同,主要优点在使用过程中感受有: 前者是jdk1.5后的新方式配置环境变量时更优雅对当前目录的控制也更合理错误流重定向特别方便进程控制更简洁 参考 https://blog.csdn.net/qq_21383435/article/details/82709284 https://blog.csdn.net/u013256816/article/details/54603910
http://www.zqtcl.cn/news/752986/

相关文章:

  • 网站淘宝推广怎么做网站seo基本流程
  • miit网站备案济南哪里做网站
  • 做网站软件的公司前端优化
  • 哪个网站有做形象墙汉沽网站建设制作
  • 网站alexa排名查询免费发帖的平台有哪些
  • 德国网站后缀濮阳房产网站建设
  • 漕泾网站建设做网站php语言用什么工具
  • 专业营销的网站建设公司哪家好专门做二手书的网站
  • 建新网站开发流程图电子商务网站开发综合实训报告
  • 临汾网站建设销售长沙网站建设1681989
  • 最近国内外重大新闻事件贺贵江seo教程
  • 网站开发源码网站运营建设方案
  • 网站建设公司 跨界鱼科技专业简述网站的制作步骤
  • 手机网站cms网站优化推广哪家好
  • 网站被k换域名qq空间 wordpress
  • 网站模板种类昆明cms建站模板
  • wordpress em企业网站做seo的优势
  • 设计师做私单网站全球最大的电商平台
  • 外贸联系网站wordpress 优惠券 插件
  • 公司网站开发费用兴田德润官方网站深圳百度快照优化
  • 做网站需要备案么行业网站策划
  • 去年做啥网站能致富周口seo推广
  • 主体负责人电话修改 网站备案什么样算网站需要备案
  • 网站建站免费空间外贸网站建设与优化
  • 网站极简设计建立网站基本知识
  • 网站建设管理标准wordpress rss采集
  • 乐清网站建设费用装修房子的app软件哪个好
  • 专业网站搭建运营工业网站素材
  • 建网站要会什么wordpress电影下载站
  • 济南设计网站的公司西安模板网站建设