国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java進程ProcessBuilder類的介紹及使用,ProcessBuilder調(diào)用外部程序執(zhí)行shell命令Linux命令

這篇具有很好參考價值的文章主要介紹了Java進程ProcessBuilder類的介紹及使用,ProcessBuilder調(diào)用外部程序執(zhí)行shell命令Linux命令。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

ProcessBuilder類的介紹及使用

【前言】

【正文】

--構(gòu)造方法--

--常用方法--

--使用技巧--

--調(diào)用本地Shell命令,實例--

【總結(jié)】

【注意】


ProcessBuilder類的介紹及使用

【前言】

????????在做一個項目的時候需要用到運行時動態(tài)執(zhí)行JAVA命令,一開始的思路是運行時生成bat腳本,然后通過Runtime類的exec方法之行bat腳本,但是此方法不好的地方在于腳本執(zhí)行時會彈出一個cmd程序界面框。后面在參考YANG的源碼時發(fā)現(xiàn)了另一種運行時執(zhí)行JAVA命令的方法,由此延申,了解了PorcessBuilder類的作用及用法。

????????ProcessBuilder類是J2SE 1.5在java.lang中新添加的一個新類,此類用于創(chuàng)建操作系統(tǒng)進程,它提供一種啟動和管理進程(也就是應(yīng)用程序)的方法。在J2SE 1.5之前,都是由Process類處來實現(xiàn)進程的控制管理。每個 ProcessBuilder 實例管理一個進程屬性集。它的start() 方法利用這些屬性創(chuàng)建一個新的 Process 實例。start() 方法可以從同一實例重復(fù)調(diào)用,以利用相同的或相關(guān)的屬性創(chuàng)建新的子進程。

【正文】

ProcessBuilder類是java.lang包下的基礎(chǔ)類,在使用時無需導(dǎo)入,可以直接使用。它主要用于創(chuàng)建和運行各類外部程序,例如javac,java等等。

--構(gòu)造方法--

它(List<String> command),它(String... command)

--常用方法--

void command(String... command) 用于將待執(zhí)行命令及參數(shù)傳遞給它;

Process start() 執(zhí)行命令并返回一個Process對象,用于獲取對執(zhí)行程序的輸入和輸出;

void directory(File base) 用于設(shè)置待執(zhí)行命令的工作目錄,可以不設(shè)置;

// ProcessBuilder API

//構(gòu)造方法 
//利用指定的操作系統(tǒng)程序和參數(shù)構(gòu)造一個進程生成器。 
ProcessBuilder(List<String> command) 
//利用指定的操作系統(tǒng)程序和參數(shù)構(gòu)造一個進程生成器。
ProcessBuilder(String… command) 

//方法 
//返回此進程生成器的操作系統(tǒng)程序和參數(shù)。 
command() 
//設(shè)置此進程生成器的操作系統(tǒng)程序和參數(shù)。 
command(List<String> command) 
//設(shè)置此進程生成器的操作系統(tǒng)程序和參數(shù)。 
command(String… command) 

//返回此進程生成器的工作目錄。 
directory() 
//設(shè)置此進程生成器的工作目錄。
directory(File directory) 
//返回此進程生成器環(huán)境的字符串映射視圖。 environment方法獲得運行進程的環(huán)境變量,得到一個Map,可以修改環(huán)境變量 
environment() 
//返回進程生成器是否合并標(biāo)準(zhǔn)錯誤和標(biāo)準(zhǔn)輸出;true為合并,false為不合并
redirectErrorStream() 
//設(shè)置此進程生成器的 redirectErrorStream 屬性。默認值為false不合并
redirectErrorStream(boolean redirectErrorStream) 
//使用此進程生成器的屬性啟動一個新進程。
start() 

--使用技巧--

1、在使用它的時候建議將其封裝一下,這樣更便于使用,例如,

public class ProcessUtil {

    public static void process(String... command) throws Exception {
? ? ? ? process((File)null, command);
? ? }

? ? public static void process(List<String> 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();
......

添加一個input2string()方法,用于將執(zhí)行程序獲得的輸出轉(zhuǎn)換為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");
? ? }

調(diào)用本地FFMPEG命令,實例:

java processbuilder,Java,# Springboot,# FFMPEG,java,開發(fā)語言??

【總結(jié)】

它作為一個JAVA底層類,使開發(fā)者能夠與操作系統(tǒng)進行強大的互動,而且在使用它進行系統(tǒng)命令的調(diào)用時,能夠在后臺進行,不會有使用Runtime類時彈出cmd命令執(zhí)行框的困擾,十分方便。在后面的學(xué)習(xí)當(dāng)中可以進一步了解一下System類的用法。

【注意】

在用Runtime.getRuntime().exec()或ProcessBuilder(array).start()創(chuàng)建子進程Process之后,一定要及時取走子進程的輸出信息和錯誤信息,否則輸出信息流和錯誤信息流很可能因為信息太多導(dǎo)致被填滿,最終導(dǎo)致子進程阻塞住,然后執(zhí)行不下去。

典型用法應(yīng)該為:

java processbuilder,Java,# Springboot,# FFMPEG,java,開發(fā)語言

參考:Java進程Runtime、Process、ProcessBuilder調(diào)用外部程序_程序猿架構(gòu)的博客-CSDN博客


如果本篇文章對你有幫助的話,很高興能夠幫助上你。

當(dāng)然,如果你覺得文章有什么讓你覺得不合理、或者有更簡單的實現(xiàn)方法又或者有理解不來的地方,希望你在看到之后能夠在評論里指出來,我會在看到之后盡快的回復(fù)你。文章來源地址http://www.zghlxwxcb.cn/news/detail-697232.html

到了這里,關(guān)于Java進程ProcessBuilder類的介紹及使用,ProcessBuilder調(diào)用外部程序執(zhí)行shell命令Linux命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【solidity三】Solidity中繼承、創(chuàng)建合約和外部調(diào)用、合約事件event、solidity中元祖的使用、new、delete關(guān)鍵字的使用、solisity創(chuàng)建合約和外部調(diào)用

    - 最重要的兩個全局變量 msg.sender 每一次和以太坊交互時都會產(chǎn)生一筆交易,這筆交易的執(zhí)行人就是msg.sender。簡而言之:誰調(diào)用的,msg.sender就是誰,每筆交易的msg.sender都可以不同。舉例: 部署合約的時候,msg.sender就是部署的賬戶。 調(diào)用setMessage時,msg.sender就是調(diào)用賬戶。

    2024年02月03日
    瀏覽(15)
  • 《string類的使用介紹》

    《string類的使用介紹》

    本文主要介紹string的常見的接口的使用 字符串是 表示字符序列的類 標(biāo)準(zhǔn)的字符串類提供了對此類對象的支持,其接口類似于標(biāo)準(zhǔn)字符容器的接口,但添加了專門用于操作單字節(jié)字符字符串的設(shè)計特性。 string類是使用char(即作為它的字符類型,使用它的默認char_traits和分配器

    2024年02月03日
    瀏覽(26)
  • string類的使用方式的介紹

    string類的使用方式的介紹

    目錄 前言 1.什么是STL 2. STL的版本 3. STL的六大組件 4.STL的缺陷 5.string 5.1 為什么學(xué)習(xí)string類? 5.1.1 C語言中的字符串 5.2 標(biāo)準(zhǔn)庫中的string類 5.3 string類的常用接口的使用 5.3.1 構(gòu)造函數(shù) 5.3.2?string類對象的容量操作 5.3.3 string類對象的訪問及遍歷操作 5.3.4?string類對象的修改操作

    2024年02月07日
    瀏覽(27)
  • 記一次使用hutool的http工具調(diào)用外部接口同步人員信息

    首先是TreeNodeVo實體 構(gòu)建目錄樹的工具類 最后根據(jù)返回的集合生成目錄結(jié)構(gòu),主要設(shè)置treenodevo對象的id,pid,value,lable參數(shù) controller類 前端vue+elementui,用級聯(lián)選擇器顯示目錄樹 data中添加treeNodeVos對象 methods中添加后臺調(diào)用方法,此方法可以在點擊頁面加載時調(diào)用,看自己,還有

    2024年02月05日
    瀏覽(23)
  • String類的學(xué)習(xí)筆記(上):介紹String類及其常用方法的使用

    String類的學(xué)習(xí)筆記(上):介紹String類及其常用方法的使用

    本文介紹了Java中用來描述操作字符串的String類,和其一些常用的基本操作方法,字符串的創(chuàng)建輸出,字符串對象的比較,字符串查找,字符串的轉(zhuǎn)化,字符串的替換,字符串拆分,字符串截取,和大小寫轉(zhuǎn)換,去除左右空格,子字符串包含,學(xué)會使用這些方法,能更方便的使用操作字符串~ 前言

    2023年04月23日
    瀏覽(35)
  • 淘寶商品API使用示例:如何通過調(diào)用外部API來獲取淘寶商品價格銷量主圖詳情數(shù)據(jù)

    淘寶商品API使用示例:如何通過調(diào)用外部API來獲取淘寶商品價格銷量主圖詳情數(shù)據(jù)

    淘寶上的商品信息量非常之大,商品的詳情信息也很齊全。如何通過調(diào)用外部API來實現(xiàn)批量獲取商品價格銷量主圖詳情等信息呢?上周剛好完成了一個完整的淘寶商品采集項目,今天特來分享一下。 接口名稱:item_get 請求地址:https://api-test.cn/taobao/item_get result_type:[json,jso

    2024年02月10日
    瀏覽(30)
  • C++ 學(xué)習(xí) ::【基礎(chǔ)篇:16】:C++ 類的基本成員函數(shù):拷貝構(gòu)造函數(shù)(認識、特征、注意點及典型使用場景)及其基本寫法與調(diào)用

    C++ 學(xué)習(xí) ::【基礎(chǔ)篇:16】:C++ 類的基本成員函數(shù):拷貝構(gòu)造函數(shù)(認識、特征、注意點及典型使用場景)及其基本寫法與調(diào)用

    本系列 C++ 相關(guān)文章 僅為筆者學(xué)習(xí)筆記記錄,用自己的理解記錄學(xué)習(xí)!C++ 學(xué)習(xí)系列將分為三個階段: 基礎(chǔ)篇、STL 篇、高階數(shù)據(jù)結(jié)構(gòu)與算法篇 ,相關(guān)重點內(nèi)容如下: 基礎(chǔ)篇 : 類與對象 (涉及C++的三大特性等); STL 篇 : 學(xué)習(xí)使用 C++ 提供的 STL 相關(guān)庫 ; 高階數(shù)據(jù)結(jié)構(gòu)與算

    2024年02月08日
    瀏覽(21)
  • 了解Java中ArrayList類的使用

    引言: ????????在Java中,ArrayList是一個非常常用的動態(tài)數(shù)組實現(xiàn),它提供了一種靈活的方式來存儲和操作數(shù)據(jù)集合。ArrayList是Java集合框架中的一部分,它允許我們在運行時動態(tài)地添加或刪除數(shù)據(jù),并提供了許多便利的方法來操作列表中的元素。 ????????首先,讓我們

    2024年01月19日
    瀏覽(18)
  • Java中Date時間類的使用

    Java中Date時間類的使用

    目錄 一、java.util.Date實例化介紹 ????????一)、Date對象實例化 ????????二)設(shè)置Date對象指定日期?: ????????三)將日期格式化輸出為中文狀態(tài) 二、方法介紹 三、方法演示 運行結(jié)果: ????????Date 類的無參數(shù)構(gòu)造方法獲取的是系統(tǒng)當(dāng)前的時間,顯示的順序為

    2024年02月13日
    瀏覽(16)
  • 關(guān)于java中PriorityQueue類的使用方法

    今天做了力扣的每日一題 ==》?2208.?將數(shù)組和減半的最少操作次數(shù)? 起初我用數(shù)組這個死方法去做這個題,代碼寫出來了,不過在最后運行的時候超時了??创罄械慕獯鹬?,我發(fā)現(xiàn)了這個類,之前從來都沒看到過,所以學(xué)習(xí)了一下,寫這篇文章記一下。 目錄 前言 一、Priori

    2024年02月15日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包