真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中怎么執(zhí)行shell命令

本篇文章給大家分享的是有關(guān)Java中怎么執(zhí)行shell命令,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括馬龍網(wǎng)站建設(shè)、馬龍網(wǎng)站制作、馬龍網(wǎng)頁(yè)制作以及馬龍網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,馬龍網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到馬龍省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

1. 環(huán)境準(zhǔn)備

執(zhí)行shell命令之前,我們需要獲取jvm底層操作系統(tǒng),同時(shí)定義通用消費(fèi)流的類。

1.1. 操作系統(tǒng)依賴

在創(chuàng)建進(jìn)場(chǎng)執(zhí)行shell命令之前,我們需要獲取jvm運(yùn)行在具體哪個(gè)操作系統(tǒng)之上。因?yàn)閃indows執(zhí)行shell命令是cmd.exe,而其他操作系統(tǒng)發(fā)布標(biāo)準(zhǔn)shell是sh:

boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");

1.2. 輸入和輸出

此外我們還需要一種方法來(lái)連接進(jìn)程的輸入、輸出流。直到輸出流被消費(fèi)進(jìn)程才會(huì)返回成功,否則會(huì)掛起。下面實(shí)現(xiàn)通用類StreamGobbler消費(fèi)InputStream:

private static class StreamGobbler implements Runnable {  private InputStream inputStream;  private Consumer consumer;   public StreamGobbler(InputStream inputStream, Consumer consumer) {    this.inputStream = inputStream;    this.consumer = consumer;  }   @Override  public void run() {    new BufferedReader(new InputStreamReader(inputStream)).lines()     .forEach(consumer);  }}

該類實(shí)現(xiàn)Runnable接口,意味著能夠被任何Executor執(zhí)行。

2. Runtime.exec()執(zhí)行

Runtime.exec()方法是一種生成新子進(jìn)程的簡(jiǎn)單方法,但不能定制。下面示例列出用戶目錄的目錄清單并打印至控制臺(tái):

String homeDirectory = System.getProperty("user.home");Process process;if (isWindows) {  process = Runtime.getRuntime()   .exec(String.format("cmd.exe /c dir %s", homeDirectory));} else {  process = Runtime.getRuntime()   .exec(String.format("sh -c ls %s", homeDirectory));}StreamGobbler streamGobbler =  new StreamGobbler(process.getInputStream(), System.out::println);Executors.newSingleThreadExecutor().submit(streamGobbler);int exitCode = process.waitFor();assert exitCode == 0;

3. ProcessBuilder執(zhí)行

第二種方法使用ProcessBuilder。這比Runtime方法更可取,因?yàn)槟軌蚨ㄖ埔恍┘?xì)節(jié)。

例如:

改變正在運(yùn)行Shell命令的工作目錄,使用builder.directory()方法  使用builder.environment()方法,設(shè)置自定義鍵值對(duì)作為環(huán)境變量  重定向輸入和輸出流值自定義流  使用build.inheritio()方法將它們都繼承到當(dāng)前JVM進(jìn)程的流中

ProcessBuilder builder = new ProcessBuilder();if (isWindows) {  builder.command("cmd.exe", "/c", "dir");} else {  builder.command("sh", "-c", "ls");}builder.directory(new File(System.getProperty("user.home")));Process process = builder.start();StreamGobbler streamGobbler =  new StreamGobbler(process.getInputStream(), System.out::println);Executors.newSingleThreadExecutor().submit(streamGobbler);int exitCode = process.waitFor();assert exitCode == 0;

以上就是Java中怎么執(zhí)行shell命令,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


新聞名稱:Java中怎么執(zhí)行shell命令
文章起源:http://weahome.cn/article/jsshce.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部